写真のファイル名を撮影日付に変換
デジカメで撮った写真が多くなりすぎて、
しかもいろいろなカメラで撮ったらファイル名が煩雑で
困ったことはありませんか?
自分も困った・・・何かいい変換ツールないかなと
探してはみたものの、いまいち見つからず。
じゃ自分で作るか!
という事で、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はどこからかダウンロードしてください。
使ってみてご意見があればよろしく!