Dateien verwalten mit Modul jdk.httpserver
ulrich
2024-01-22 c28d338cf5c917a867faf58204b85203d620f06e
commit | author | age
cc154b 1 /*
U 2   http-cm - File management extensions to jdk.httpserver
3   Copyright (C) 2021  Ulrich Hilger
4
5   This program is free software: you can redistribute it and/or modify
6   it under the terms of the GNU Affero General Public License as
7   published by the Free Software Foundation, either version 3 of the
8   License, or (at your option) any later version.
9
10   This program is distributed in the hope that it will be useful,
11   but WITHOUT ANY WARRANTY; without even the implied warranty of
12   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13   GNU Affero General Public License for more details.
14
15   You should have received a copy of the GNU Affero General Public License
16   along with this program.  If not, see <https://www.gnu.org/licenses/>.
17  */
18 package de.uhilger.httpserver.cm.actor;
19
20 import static de.uhilger.httpserver.cm.FileManager.OP_MOVE;
21 import static de.uhilger.httpserver.cm.FileManager.STR_DOT;
22 import de.uhilger.httpserver.cm.FileTransporter;
23 import de.uhilger.httpserver.cm.OrdnerBearbeiter;
24 import de.uhilger.httpserver.image.ImageActor;
25 import java.io.File;
26 import java.io.IOException;
27 import java.nio.file.DirectoryStream;
28 import java.nio.file.Files;
29 import java.nio.file.Path;
30
31 /**
32  * Eine Klasse mit Methoden zum Kopieren und Verschieben von Dateien
33  * 
34  * @author Ulrich Hilger, 15. Janaur 2024
35  */
36 public class Mover {
37   public String copyOrMoveFiles(String fromPath, String toPath, String[] fileNames, int operation, String base) throws IOException {
38     String result = null;
39     File srcDir = new File(base, fromPath);
40     File targetDir = new File(base, toPath);
41     for (String fileName : fileNames) {
42       File srcFile = new File(srcDir, fileName);
43       //logger.fine("srcFile: " + srcFile);
44       if (srcFile.isDirectory()) {
45         //logger.fine("srcFile is directory.");
46         OrdnerBearbeiter bearbeiter = new OrdnerBearbeiter();
47         bearbeiter.setTargetDir(targetDir.toPath());
48         bearbeiter.setOperation(operation);
49         Files.walkFileTree(srcFile.toPath(), bearbeiter);
50       } else {
51         Path source = srcFile.toPath();
52         File destFile = targetDir.toPath().resolve(source.getFileName()).toFile();
53         if (destFile.exists()) {
54           FileTransporter trans = new FileTransporter();
55           destFile = trans.getNewFileName(destFile);
56         }
57         if (operation == OP_MOVE) {
58           String fname = srcFile.getName().toLowerCase();
59           if (fname.endsWith(ImageActor.JPEG)
60                   || fname.endsWith(ImageActor.JPG)
61                   || fname.endsWith(ImageActor.PNG)) {
62             moveImgFilesToDirectory(srcFile, srcDir, targetDir, false);
63           } else {
64             Files.move(source, destFile.toPath());
65           }
66         } else {
67           Files.copy(source, destFile.toPath());
68         }
69       }
70     }
71     return result;
72   }
73
74   private void moveImgFilesToDirectory(File srcFile, File srcDir, File targetDir, boolean createDestDir) throws IOException {
75     String fnameext = srcFile.getName();
76     int dotpos = fnameext.lastIndexOf(STR_DOT);
77     String fname = fnameext.substring(0, dotpos);
78     String ext = fnameext.substring(dotpos);
79     //logger.fine("fname: " + fname + ", ext: " + ext);
80     Path targetPath = targetDir.toPath();
81     DirectoryStream<Path> stream = Files.newDirectoryStream(srcDir.toPath(), fname + "*" + ext); //"*.{txt,doc,pdf,ppt}"
82     for (Path path : stream) {
83       //logger.fine(path.getFileName().toString());
84       //Files.delete(path);
85       Files.move(path, targetPath.resolve(path.getFileName()));
86     }
87     stream.close();
88   }
89   
90   public String duplizieren(String base, String relPfad) throws IOException {
91     File srcFile = new File(base, relPfad);
92     String fnameext = srcFile.getName();
93     int dotpos = fnameext.lastIndexOf(STR_DOT);
94     String fname = fnameext.substring(0, dotpos);
95     String ext = fnameext.substring(dotpos);
96     File srcDir = srcFile.getParentFile();
97     File destFile = new File(srcDir, fname + "-Kopie" + ext);
98     int i = 1;
99     while (destFile.exists()) {
100       destFile = new File(srcDir, fname + "-Kopie-" + Integer.toString(++i) + ext);
101     }
102     Files.copy(srcFile.toPath(), destFile.toPath());
103     return destFile.getName();
104   }
105
106   
107 }