From 0cd5e868890043ce0544444cbf87a753b4119a93 Mon Sep 17 00:00:00 2001 From: ulrich Date: Fri, 15 Nov 2024 09:35:07 +0000 Subject: [PATCH] Beruecksichtigung aller Varianten eines Bildes auch beim Kopieren von Bilddateien --- src/de/uhilger/fm/Mover.java | 74 ++++++++++++++++++++++++------------ 1 files changed, 49 insertions(+), 25 deletions(-) diff --git a/src/de/uhilger/fm/Mover.java b/src/de/uhilger/fm/Mover.java index 66986aa..5b452db 100644 --- a/src/de/uhilger/fm/Mover.java +++ b/src/de/uhilger/fm/Mover.java @@ -24,7 +24,7 @@ import java.nio.file.Path; /** - * Die Klasse Mover verschiebt und kopiert Dateien und Ordner + * Verschieben und Kopieren von Dateien und Ordnern * * Handhabung von Bilddateien: * @@ -40,6 +40,34 @@ public static final int OP_MOVE = 2; /** + * Dateien und Ordner kopieren + * + * @param fromPath der Pfad zur Quelle der Kopieraktion + * @param toPath der Pfad zum Ziel der Kopieraktion + * @param fileNames die Liste der Dateien und Ordner, die kopiert werden sollen + * @param base der Basispfad, gegen den fromPath und toPath aufgeloest werden sollen + * @throws IOException wenn etwas schief geht + */ + public void copy(String fromPath, String toPath, String[] fileNames, String base) + throws IOException { + copyOrMoveFiles(fromPath, toPath, fileNames, OP_COPY, base); + } + + /** + * Dateien und Ordner verschieben + * + * @param fromPath der Pfad zur Quelle der Verschiebeaktion + * @param toPath der Pfad zum Ziel der Verschiebeaktion + * @param fileNames die Liste der Dateien und Ordner, die verschoben werden sollen + * @param base der Basispfad, gegen den fromPath und toPath aufgeloest werden sollen + * @throws IOException wenn etwas schief geht + */ + public void move(String fromPath, String toPath, String[] fileNames, String base) + throws IOException { + copyOrMoveFiles(fromPath, toPath, fileNames, OP_MOVE, base); + } + + /** * Dateien und Ordner verschieben oder kopieren * * @param fromPath der Pfad zur Quelle der Verschiebe- oder Kopieraktion @@ -49,17 +77,14 @@ * @param base der Basispfad, gegen den fromPath und toPath aufgeloest werden sollen * @throws IOException wenn etwas schief geht */ - public void copyOrMoveFiles(String fromPath, String toPath, String[] fileNames, + private void copyOrMoveFiles(String fromPath, String toPath, String[] fileNames, int operation, String base) throws IOException { - //String result = null; File srcDir = new File(base, fromPath); File targetDir = new File(base, toPath); for (String fileName : fileNames) { File srcFile = new File(srcDir, fileName); - //logger.fine("srcFile: " + srcFile); if (srcFile.isDirectory()) { - //logger.fine("srcFile is directory."); - CopyMoveVisitor bearbeiter = new CopyMoveVisitor(); + FileOpsVisitor bearbeiter = new FileOpsVisitor(); bearbeiter.setTargetDir(targetDir.toPath()); bearbeiter.setOperation(operation); Files.walkFileTree(srcFile.toPath(), bearbeiter); @@ -69,21 +94,20 @@ if (destFile.exists()) { destFile = getNewFileName(destFile); } - if (operation == OP_MOVE) { - String fname = srcFile.getName().toLowerCase(); - if (fname.endsWith(ImageFileFilter.JPEG) - || fname.endsWith(ImageFileFilter.JPG) - || fname.endsWith(ImageFileFilter.PNG)) { - moveImgFilesToDirectory(srcFile, srcDir, targetDir/*, false*/); - } else { - Files.move(source, destFile.toPath()); - } + String fname = srcFile.getName().toLowerCase(); + if (fname.endsWith(ImageFileFilter.JPEG) + || fname.endsWith(ImageFileFilter.JPG) + || fname.endsWith(ImageFileFilter.PNG)) { + copyOrMoveImgFilesToDirectory(srcFile, srcDir, targetDir/*, false*/, operation); } else { - Files.copy(source, destFile.toPath()); - } + if (operation == OP_MOVE) { + Files.move(source, destFile.toPath()); + } else { + Files.copy(source, destFile.toPath()); + } + } } } - //return result; } /** @@ -98,20 +122,20 @@ * @param targetDir der Zielort * @throws IOException wenn etwas schief geht */ - private void moveImgFilesToDirectory(File srcFile, File srcDir, File targetDir/*, - boolean createDestDir*/) throws IOException { + private void copyOrMoveImgFilesToDirectory(File srcFile, File srcDir, File targetDir, + int operation) throws IOException { String fnameext = srcFile.getName(); int dotpos = fnameext.lastIndexOf("."); String fname = fnameext.substring(0, dotpos); String ext = fnameext.substring(dotpos); - //logger.fine("fname: " + fname + ", ext: " + ext); Path targetPath = targetDir.toPath(); DirectoryStream<Path> stream = Files.newDirectoryStream(srcDir.toPath(), fname + "*" + ext); - //"*.{txt,doc,pdf,ppt}" for (Path path : stream) { - //logger.fine(path.getFileName().toString()); - //Files.delete(path); - Files.move(path, targetPath.resolve(path.getFileName())); + if(operation == OP_COPY) { + Files.copy(path, targetPath.resolve(path.getFileName())); + } else { + Files.move(path, targetPath.resolve(path.getFileName())); + } } stream.close(); } -- Gitblit v1.9.3