写真のファイル名を撮影日付に変換

デジカメで撮った写真が多くなりすぎて、
しかもいろいろなカメラで撮ったらファイル名が煩雑で
困ったことはありませんか?


自分も困った・・・何かいい変換ツールないかなと
探してはみたものの、いまいち見つからず。
じゃ自分で作るか!
という事で、ExifというJavaのライブラリを使ってみました。
カメラが勝手につけた英字+連番のファイル名を撮影日付に変換します。
年月日_時分秒.jpgです。(JPEGのみ対応)



import java.io.File;
import Exif.ExifProperty;

public final class RenamePict {

/**
* @param args
*/

public static void main(String[] args) {
// パラメータなしは処理しない
if (args.length != 1) {
return;
}

String filePath = args[0].replaceAll("\\\\", "/");
if (!filePath.substring(filePath.length() - 1).equals("/")) {
filePath = filePath + "/";
}

File file = new File(filePath);
String[] filelist = file.list();
String pictdate = null;
ExifProperty exif = new ExifProperty();
File oldfile = null;
File newfile = null;

for( int i = 0 ; i < filelist.length ; i ++ ) {
// JPEGファイル以外は対象外
if (!(filelist[i].toLowerCase().substring(
filelist[i].length() - 3).equals("jpg"))) {
continue;
}

// JPEGファイルの撮影日付を取得
// try catchは撮影日付を持っていないようなファイルは
// getPictDateでエラーが出るので無視する
try {
// 属性から撮影日付を取得
pictdate = exif.getPictDate(filePath + filelist[i]);

// ファイル名を変更する
newfile = new File(filePath + pictdate + ".jpg");

// 仮に同じファイル名が存在した場合は何もしない
// (大切な写真を消してしまわないため)
if (newfile.exists()) {
continue;
}
oldfile = new File(filePath + filelist[i]);
oldfile.renameTo(newfile);
} catch (Exception e) {
continue;
}
}
}
}

使い方は引数にファイルが保存してあるパスを指定します。
撮影日付を持たないファイルがあった場合、
java.io.EOFExceptionが出ますが、処理は続行します。
コンソール上にエラーが出るが、exifが中で出しているので
コントロールできず。。
なお、Exifはどこからかダウンロードしてください。


使ってみてご意見があればよろしく!