[Java]檔案整理工具-照片整理

有時照片從相機複製下來後懶的整理,時間一久就越來越不好查看到底是在何時拍的,這時候就可以利用這個程式來做分類整理,主要是利用遞迴的方法一直向指定目錄下的每一層找尋圖片檔,再複製至以年月為目錄的分類資料夾。

程式的作法大概是先取得目錄列表,再判斷每一個檔案是目錄或是檔案,如果是檔案,檢查是否為jpg檔,如果是檔案,則取得其修改日期的年月,建立存放目錄的年月目錄資料夾,並複製檔案至此資料夾,如果是目錄,則迴丟至此function,製作遞迴效果。

ImgFilter.png

原始碼如下:

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();
    }
}

原始碼包裝下載-Eclipse格式

 

One thought to “[Java]檔案整理工具-照片整理”

發表迴響