有時照片從相機複製下來後懶的整理,時間一久就越來越不好查看到底是在何時拍的,這時候就可以利用這個程式來做分類整理,主要是利用遞迴的方法一直向指定目錄下的每一層找尋圖片檔,再複製至以年月為目錄的分類資料夾。
程式的作法大概是先取得目錄列表,再判斷每一個檔案是目錄或是檔案,如果是檔案,檢查是否為jpg檔,如果是檔案,則取得其修改日期的年月,建立存放目錄的年月目錄資料夾,並複製檔案至此資料夾,如果是目錄,則迴丟至此function,製作遞迴效果。
原始碼如下:
package yku; public class FilterIMG { // 存放目錄 private static final String DirMove = "d:/mypic"; public static void main(String args[]) throws java.io.IOException { // if (args.length == 0) // return; // 來源 String source = "d:/backup/yku/picture"; java.io.File SetDir = new java.io.File(DirMove); if (!SetDir.exists()) { SetDir.mkdirs(); } java.io.File f = new java.io.File(source); if (f.exists()) { workup(f, SetDir); } } public static void workup(java.io.File f, java.io.File SetDir) throws java.io.IOException { if (!f.exists()) return; if (!SetDir.exists()) return; java.util.Calendar FileTime = java.util.Calendar.getInstance(); java.io.File[] list = f.listFiles(); for (int i = 0; i < list.length; i++) { System.out.println(list[i].getName()); // 是檔案而且又是jpg的檔案 if (list[i].isFile() && list[i].getName().toLowerCase().endsWith(".jpg")) { // 取得檔案的修改時間 FileTime.setTimeInMillis(list[i].lastModified()); // 年月資料夾的路徑 java.io.File to = new java.io.File(SetDir.getPath() + java.io.File.separator + FileTime.get(java.util.Calendar.YEAR) + java.io.File.separator + String.format("%02d", FileTime .get(java.util.Calendar.MONTH) + 1)); // 如果年月資料夾不存在的話則建立 if (!to.exists()) to.mkdirs(); copyto(list[i], to); } else if (list[i].isDirectory()) { // 利用遞迴來處理 workup(list[i], SetDir); } } } // 複製檔案 public static void copyto(java.io.File srcFile, java.io.File dstFile) throws java.io.IOException { if (!srcFile.isFile()) throw new java.io.IOException("copy時來源錯誤!!!"); // 複製目的地如果是資料夾,則把來源檔案名稱當然目的地的檔案名稱 if (dstFile.isDirectory()) { dstFile = new java.io.File(dstFile.getAbsolutePath() + java.io.File.separator + srcFile.getName()); } if (dstFile.exists())// 不覆蓋 { // dstFile.delete(); return; } // 以下為複製作業 java.io.BufferedInputStream in = new java.io.BufferedInputStream( new java.io.FileInputStream(srcFile)); java.io.BufferedOutputStream out = new java.io.BufferedOutputStream( new java.io.FileOutputStream(dstFile)); byte[] tmp = new byte[1024]; while (in.read(tmp) != -1) { out.write(tmp); } in.close(); out.close(); } }
One thought to “[Java]檔案整理工具-照片整理”