Java GUI程式設計之圖片分攤小工具的實現(初級)

哩叔發表於2011-11-27

    這篇文章裡面主要分三部分:

        第一、該工具的簡單介紹;

        第二、該工具中涉及到的技術;

        第三、原始碼介紹;

        首先,做這個工具是基於我們公司人資部門的一個需求,在之前的下班的路上和公司人資的同事一起交流工作的時候無意間得知現在她們部門需要週末加班分攤圖片,就是將公司一千多張圖片按照既定的規則進行分組。比如將張三、李四分到一個資料夾下面,王五、趙六分到另外一個資料夾下面就這樣的一個小功能。由於當時正好趕上公司做使用者頭像功能的開發工作,所以在當時就跟我的同事說這個東西完全可以用一段小程式來實現,編寫這樣的一個小工具也就是一兩個小時的事兒何必要動員部門員工加班去做這些的事兒呢,所以當時就利用午休的時間做了這樣一個小工具,但是由於是週五快下班的時候讓人資過來進行分攤,在分攤過程中出現了一點點的問題,所以導致了分攤失敗。之所以失敗是由於當時考慮的功能的時候沒有做深入的思考,這也讓本人也感覺非常的丟人和沒有面子。當時晚上要趕火車出差,所以第二天也沒有給他們繼續完善這個工作。時至今日他們分攤工作一定結束了,雖然他們可能用不上了,但是這個東西還是需要做一些總結和反思。

        對於此簡單的工具技術上沒什麼難點對於知道Java是什麼的人就能夠用其實現,這個工具就是將一堆雜亂無章的圖片按照規則移動到相應的資料夾下面,實現這個簡單的功能主要的核心就是第一、檔案的移動;第二、excel或者其他規則定義檔案的讀取(這裡主要是採用excel來定義規則)。

   ①通過FileInputStream和FileInputStream流即可實現②excel檔案讀取是採用的jxl包來實現。下面將程式碼貼出以供參考。

/**
     * @author qingfeilee
     * @time 2011-11-5 19:37
     * @param oldPath, newPath
     * @description This method accept two params oldPath, newPath
     *             which represent the original file path and the new file path
     * @return log
     * **/
    public String moveImage(String oldPath,String newPath){
       String log = "日誌資訊";
       FileInputStream fin = null;
       FileOutputStream fout = null;
       try{
           File oldFile = new File(oldPath);
           File newFile = new File(newPath+"/"+oldFile.getName());
           if(oldFile.exists()){
              if(!newFile.exists()){
                  newFile.createNewFile();
              }
              fin = new FileInputStream(oldFile);
              fout = new FileOutputStream(newPath+"/"+oldFile.getName());
              byte[] b =new byte[512];
              int n = fin.read(b);
              while(n != -1){
                  fout.write(b);
                  n = fin.read(b);
              }
              log = oldFile.getName()+"成功移動!";
           }
       } catch (Exception e) {
           try {
              fin.close();
              fout.close();
           } catch (IOException ee) {
              log = "檔案流關閉失敗!";
              ee.printStackTrace();
           }
           log = "檔案移動失敗!";
           e.printStackTrace();
       }
       return log;
    }

       所以要想實現圖片的移動只需要在點選一個按鈕的時候來呼叫這個方法即可,呼叫這個方法需要傳遞待分攤檔案的路徑以及將要分攤到目錄。而這些資訊是通過excel來定義的,所以下面就將讀取excel檔案的方法粘出來供交流。

  

  /**
     * @author qingfeilee
     * @time 2011-11-5 20:40
     * @param path
     * @description This method accept only one param path
     *             which represent the excel path
     * @return imageBeans
     * **/
    public ArrayList<ImageBean>getExcelData(String path){
       ArrayList<ImageBean> imageBeans = new ArrayList<ImageBean>();
       try {
           //開啟excel檔案
           Workbook book = Workbook.getWorkbook(new File(path)) ;
           //取得第一個sheet
           Sheet sheet = book.getSheet(0);
           //取得行數
           int rows = sheet.getRows();
           for(int i = 1; i < rows; i++) {
              ImageBean imageBean = new ImageBean();
              imageBean.setFileId(sheet.getCell(0, i).getContents());
              imageBean.setUserName(sheet.getCell(1,i).getContents());
              imageBeans.add(imageBean);
           }
           //關閉檔案
           book.close();
       } catch (BiffException e) {
           e.printStackTrace();
       } catch (IOException e) {
           e.printStackTrace();
       }
       return imageBeans;
    }
}

       通過這方法將excel檔案資訊讀出來,並將其儲存到一個list裡面,如果後期需要擴充套件excel的規則只需要修改這個方法和bean類即可。

通過這兩個核心的方法即可實現了上面提到的圖片分攤工具,但是如果僅僅是這樣的程式碼人資的人肯定還是手足無措,所以還需要加上圖形化操作工具來供他們使用。下面簡單的將操作圖形工具粘出來和各位同行交流。該小工具效果圖如圖一:

                                                

圖一

        在大學期間曾經做過幾個JavaSwing程式,但是當時對這些東西都是一致半解所以出現了大量的程式碼冗餘,雖然現在對設計有了一點點的瞭解但是很多東西還是需要不斷的學習和理解的。這個很小的登入介面其實用一個Frame並在這其上新增button、textfield、label即可實現,但是最近一段時間對於超過三百行的類就不想看的情緒還是讓我把這個簡單的介面分拆成了幾個類來實現。將程式拆分不僅僅可以降低程式碼的冗餘率提高程式碼的重用,同時也是程式容易擴充套件降低各個模組間的耦合度。工具結構層次如圖二:

                                                                            

圖二

                  

        對於圖形介面的開發主要是通過ui包來實現這些工作ui包主要是將皮膚繪製、皮膚繪製、介面常量。其中的功能包主要是考慮以後大資料載入的時候處理大資料,目前還沒有對大資料(大於一萬的資料量沒有測試,所以姑且將大於一萬叫做大資料吧)進行實現需要在以後慢慢完善。

圖片的移動和excel的讀取全部在util包裡進行實現,

 最後通過啟動tooler類來啟動整個小工具

public class Tooler {
    /**
     * @author qingfeilee
     * @date 2011-11-20
     * @description launch the tooler
     */
    public void launch(){
       ToolerFrame tooler = new ToolerFrame();
       tooler.init();
    }
   
    public static void main(String args[]){
       Tooler tooler = new Tooler();
       tooler.launch();
    }
}


       通過這個小工具讓我再次意識到了專案中整體思考的重要性。

       最後、謝謝我的同事在工作上對於我這個職場新人的指導;謝謝專案組在我進入公司到現在給予我的幫助,在專案這近一年的時間裡成長了很大,在以後的工作中會不棄不捨更加努力學習快速成長。

 

 

 

 


相關文章