java
1package main; 2 3import java.io.File; 4 5public class Start { 6 7 public static void main(String[] args) { 8 String path = "写真のあるディレクトリ"; 9 mainProc(path); 10 11 } 12 13 private static void mainProc(String path) { 14 15 String photoDate; 16 17 //ファイル一覧を取得 18 File[] photoFiles = new File(path).listFiles(); 19 20 for (File photoFile : photoFiles) { 21 22 if (photoFile.isDirectory()) { 23 //フォルダだった場合 24 25 mainProc(photoFile.getPath()); 26 27 } else if (photoFile.isFile()) { 28 //ファイルだった場合 29 30 //日付の取得 31 photoDate = ExifUtil.getPhotoDate(photoFile); 32 33 photoFile.renameTo( 34 new File(photoFile.getAbsoluteFile().getParent() + "/" + photoDate + "-" + ".jpg")); 35 } 36 } 37 } 38}
java
1package main; 2 3import java.io.File; 4import java.io.IOException; 5 6import com.drew.imaging.jpeg.JpegMetadataReader; 7import com.drew.imaging.jpeg.JpegProcessingException; 8import com.drew.metadata.exif.ExifDirectoryBase; 9import com.drew.metadata.exif.ExifSubIFDDirectory; 10 11public class ExifUtil { 12 13 public static String getPhotoDate(File pictureFile) { 14 ExifDirectoryBase directory = null; 15 String year; 16 String month; 17 String day; 18 String hour; 19 String minute; 20 String second; 21 try { 22 directory = JpegMetadataReader.readMetadata(pictureFile).getFirstDirectoryOfType(ExifDirectoryBase.class); 23 } catch (JpegProcessingException e) { 24 // TODO 自動生成された catch ブロック 25 e.printStackTrace(); 26 } catch (IOException e) { 27 // TODO 自動生成された catch ブロック 28 e.printStackTrace(); 29 } 30 31 year = directory.getString(ExifSubIFDDirectory.TAG_DATETIME).toString().substring(0, 4) + "年"; 32 month = directory.getString(ExifSubIFDDirectory.TAG_DATETIME).toString().substring(5, 7) + "月"; 33 day = directory.getString(ExifSubIFDDirectory.TAG_DATETIME).toString().substring(8, 10) + "日"; 34 hour = directory.getString(ExifSubIFDDirectory.TAG_DATETIME).toString().substring(11, 13) + "時"; 35 minute = directory.getString(ExifSubIFDDirectory.TAG_DATETIME).toString().substring(14, 16) + "分"; 36 second = directory.getString(ExifSubIFDDirectory.TAG_DATETIME).toString().substring(17, 19) + "秒"; 37 String pDate = year + month + day + hour + minute + second; 38 return pDate; 39 } 40 41} 42
使用jar
xmpcore-5.1.2.jar
metadata-extractor-2.9.1.jar
上記のソースにフォルダごとに一意のファイル名を付けたいと思っています。
秒まで一致していると一意にならないため対策が必要なのですがどうやったらいいかがわかりません。
フォルダごとに番号を一意にしたいです。
回答3件
あなたの回答
tips
プレビュー