diff --git a/src/main/java/osm/surveyor/matchtime/ImgFileFilter.java b/src/main/java/osm/surveyor/matchtime/ImgFileFilter.java new file mode 100644 index 0000000..906d6bc --- /dev/null +++ b/src/main/java/osm/surveyor/matchtime/ImgFileFilter.java @@ -0,0 +1,17 @@ +package osm.jp.gpx; + +import java.io.File; +import java.io.FilenameFilter; + +/** + * JPEGファイルフィルター + * @author yuu + */ +public class ImgFileFilter implements FilenameFilter { + + @Override + public boolean accept(File dir, String name) { + return name.toUpperCase().matches(".*\\.JPG$"); + } + +} diff --git a/src/main/java/osm/surveyor/matchtime/ImgFolder.java b/src/main/java/osm/surveyor/matchtime/ImgFolder.java new file mode 100644 index 0000000..ffa2a91 --- /dev/null +++ b/src/main/java/osm/surveyor/matchtime/ImgFolder.java @@ -0,0 +1,46 @@ +package osm.jp.gpx; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Path; +import java.text.ParseException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Comparator; + +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.TransformerException; + +import org.apache.commons.imaging.ImageReadException; +import org.apache.commons.imaging.ImageWriteException; +import org.xml.sax.SAXException; + +public class ImgFolder extends ArrayList { + AppParameters params; + Path imgDir; + + public ImgFolder(Path imgDir) { + this.imgDir = imgDir; + File[] files = imgDir.toFile().listFiles(new ImgFileFilter()); + Arrays.sort(files, new FileSort()); + for (File file : files) { + this.add(new ImgFile(file)); + } + } + + public Path getImgDir() { + return this.imgDir; + } + + /** + * ファイル名の順序に並び替えるためのソートクラス + * + */ + static class FileSort implements Comparator { + @Override + public int compare(File src, File target){ + int diff = src.getName().compareTo(target.getName()); + return diff; + } + } +} diff --git a/src/main/java/osm/surveyor/matchtime/Restamp.java b/src/main/java/osm/surveyor/matchtime/Restamp.java index 1534f59..37a880a 100755 --- a/src/main/java/osm/surveyor/matchtime/Restamp.java +++ b/src/main/java/osm/surveyor/matchtime/Restamp.java @@ -15,6 +15,8 @@ import java.util.stream.Collectors; import java.util.stream.Stream; +import osm.jp.gpx.ImgFolder; + /** * 動画から一定間隔で切り出したIMAGEファイルの更新日時を書き換える * @@ -211,30 +213,22 @@ int bCount2 = 0; boolean base1 = false; boolean base2 = false; - ArrayList jpgFiles = new ArrayList<>(); // 指定されたディレクトリ内のJPEGファイルすべてを対象とする - try (Stream files = Files.list(Paths.get(imgDir.toString()))){ - List sortedList = files.sorted(Comparator.naturalOrder()).collect(Collectors.toList()); - - for (Path p : sortedList) { - if (Files.exists(p) && Files.isRegularFile(p)) { - String filename = p.getFileName().toString(); - if (filename.toUpperCase().endsWith(".JPG")) { - jpgFiles.add(p); - bCount1 += (base1 ? 0 : 1); - bCount2 += (base2 ? 0 : 1); - if (p.getFileName().equals(baseFile1.getFileName())) { - base1 = true; - } - if (p.getFileName().equals(baseFile2.getFileName())) { - base2 = true; - } - } + //try (Stream files = Files.list(Paths.get(imgDir.toString()))){ + try (ImgFolder imgFolder = new ImgFolder(Paths.get(imgDir.toString()))){ + for (ImgFile img : imgFolder) { + bCount1 += (base1 ? 0 : 1); + bCount2 += (base2 ? 0 : 1); + if (img.getFileName().equals(baseFile1.getFileName())) { + base1 = true; + } + if (img.getFileName().equals(baseFile2.getFileName())) { + base2 = true; } } - if (!jpgFiles.isEmpty()) { - DateFormat df2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS z"); + if (!imgFolder.isEmpty()) { + DateFormat df2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z"); // imgDir内の画像ファイルを処理する long span = this.baseTime2.getTime() - this.baseTime1.getTime(); @@ -242,7 +236,7 @@ int i = 0; System.out.println("-------------------------------"); System.out.println("Update last modified date time."); - for (Path jpgFile : jpgFiles) { + for (ImgFile img : imgFolder) { long deltaMsec = (i - (bCount1 -1)) * span; i++; Calendar cal = Calendar.getInstance();