From cc154b2eb849be9da34f2eca21fa128ae26b53ff Mon Sep 17 00:00:00 2001 From: ulrich Date: Mon, 15 Jan 2024 17:24:37 +0000 Subject: [PATCH] Relevante Teile von FileManager in Klasse Lister und Mover verlegt, innere Klasse DirList ausgelagert --- src/de/uhilger/httpserver/cm/DirList.java | 49 ++++ src/de/uhilger/httpserver/cm/actor/Lister.java | 184 ++++++++++++++++++ src/de/uhilger/httpserver/cm/actor/Mover.java | 111 +++++++++++ src/de/uhilger/httpserver/cm/FileManager.java | 253 ++---------------------- 4 files changed, 368 insertions(+), 229 deletions(-) diff --git a/src/de/uhilger/httpserver/cm/DirList.java b/src/de/uhilger/httpserver/cm/DirList.java new file mode 100644 index 0000000..0b4c82a --- /dev/null +++ b/src/de/uhilger/httpserver/cm/DirList.java @@ -0,0 +1,49 @@ +/* + http-cm - File management extensions to jdk.httpserver + Copyright (C) 2021 Ulrich Hilger + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + */ +package de.uhilger.httpserver.cm; + +import de.uhilger.httpserver.image.Datei; +import java.util.List; + +/** + * Einfache Transportklasse fuer eine Verzeichnisliste + * + * @author Ulrich Hilger, 15. Januar 2024 + */ +public class DirList { + private String pfad; + private List<Datei> dateien; + + public String getPfad() { + return pfad; + } + + public void setPfad(String pfad) { + this.pfad = pfad; + } + + public List<Datei> getDateien() { + return dateien; + } + + public void setDateien(List<Datei> dateien) { + this.dateien = dateien; + } + + +} diff --git a/src/de/uhilger/httpserver/cm/FileManager.java b/src/de/uhilger/httpserver/cm/FileManager.java index f40b401..5b0c5a2 100644 --- a/src/de/uhilger/httpserver/cm/FileManager.java +++ b/src/de/uhilger/httpserver/cm/FileManager.java @@ -28,6 +28,8 @@ import de.uhilger.httpserver.base.HttpResponder; import de.uhilger.httpserver.base.HttpHelper; import de.uhilger.httpserver.base.handler.FileHandler; +import de.uhilger.httpserver.cm.actor.Lister; +import de.uhilger.httpserver.cm.actor.Mover; import de.uhilger.httpserver.image.Datei; import de.uhilger.httpserver.image.ImageActor; import de.uhilger.httpserver.image.ImageThread; @@ -100,7 +102,7 @@ * @author Ulrich Hilger * @version 1, 13. Mai 2021 */ -public class FileManager extends FileHandler implements ThreadListener { +public class FileManager extends FileHandler { /* private static final String[] specialChars = {new String("\u00c4"), new String("\u00d6"), @@ -128,18 +130,12 @@ public static final String ATTR_ROLE = "role"; - private final List waitingThreads; - private final int maxThreads; - private int threadCount; //private String role; //public FileManager(String absoluteDirectoryPathAndName, String role, String ctx) { public FileManager() { //super(absoluteDirectoryPathAndName, ctx); //super(absoluteDirectoryPathAndName); - waitingThreads = new ArrayList(); - maxThreads = 4; - threadCount = 0; //this.role = role; } @@ -156,7 +152,23 @@ HttpHelper helper = new HttpHelper(); switch (method) { case HttpHelper.HTTP_GET: - liste(e, helper); + String path = e.getRequestURI().toString(); + if (path.endsWith(STR_SLASH)) { + String json = new Lister().liste(helper.getFileName(e), + e.getHttpContext().getPath(), + e.getHttpContext().getAttributes().get(FileHandler.ATTR_FILE_BASE).toString(), + path); + if(null != json) { + HttpResponder r = new HttpResponder(); + r.antwortSenden(e, SC_OK, json); + } else { + emptyListResponse(e); + } + } else { + new Lister().b64Action(helper.getFileName(e), + e.getHttpContext().getAttributes().get(FileHandler.ATTR_FILE_BASE).toString()); + super.handle(e); + } break; case HttpHelper.HTTP_PUT: put(e, helper); @@ -192,7 +204,9 @@ break; case P_DUPLICATE: if(Boolean.parseBoolean(params[1])) { - String neuerDateiName = duplizieren(exchange, helper); + String neuerDateiName = new Mover().duplizieren( + exchange.getHttpContext().getAttributes().get(FileHandler.ATTR_FILE_BASE).toString(), + helper.getFileName(exchange)); //logger.fine("neuer Name: " + neuerDateiName); standardHeaderUndAntwort(exchange, SC_OK, neuerDateiName); } @@ -228,155 +242,6 @@ } } - public class DirList { - private String pfad; - private List<Datei> dateien; - - public String getPfad() { - return pfad; - } - - public void setPfad(String pfad) { - this.pfad = pfad; - } - - public List<Datei> getDateien() { - return dateien; - } - - public void setDateien(List<Datei> dateien) { - this.dateien = dateien; - } - - - } - - private void liste(HttpExchange e, HttpHelper helper) throws IOException { - String path = e.getRequestURI().toString(); - //logger.fine(path); - String fName = helper.getFileName(e); - String dirListPath = e.getHttpContext().getPath() + fName; - if (path.endsWith(STR_SLASH)) { - //logger.fine("fName: " + fName); - File dir = new File(e.getHttpContext().getAttributes().get(FileHandler.ATTR_FILE_BASE).toString(), fName); - //logger.fine("absPath: " + dir.getAbsolutePath()); - File[] files = dir.listFiles(new ImageFileFilter()); - if(files != null && files.length > 0) { - Arrays.sort(files); - ArrayList liste = new ArrayList(); - for (File file : files) { - Datei datei = new Datei(); - String dateiName = file.getName(); - datei.setName(dateiName); - if (file.isDirectory()) { - datei.setTyp(Datei.TYP_ORDNER); - } else { - datei.setTyp(Datei.TYP_DATEI); - } - //datei.setPfad(e.getHttpContext().getPath() + fName); - String lowerName = dateiName.toLowerCase(); - if (lowerName.endsWith(ImageActor.JPEG) - || lowerName.endsWith(ImageActor.JPG) - || lowerName.endsWith(ImageActor.PNG)) { - datei.setBild(true); - String ext = dateiName.substring(dateiName.lastIndexOf(STR_DOT)); - String ohneExt = dateiName.substring(0, dateiName.lastIndexOf(STR_DOT)); - datei.setMiniurl(ohneExt + ImageActor.TN + ext); - buildImgSrc(file, datei, ohneExt, ext); - } - liste.add(datei); - } - while(threadCount > 0) { - try { - Thread.sleep(50); - } catch (InterruptedException ex) { - Logger.getLogger(FileManager.class.getName()).log(Level.SEVERE, null, ex); - } - } - if(liste.size() > 0) { - DirList list = new DirList(); - list.setPfad(dirListPath); - list.setDateien(liste); - Gson gson = new Gson(); - //String json = gson.toJson(liste); - String json = gson.toJson(list); - //byte[] bytes = json.getBytes(); - //logger.fine("json: '" + json + "'"); - HttpResponder r = new HttpResponder(); - r.antwortSenden(e, SC_OK, json); - } else { - emptyListResponse(e); - } - } else { - emptyListResponse(e); - } - } else { - String lowerName = fName.toLowerCase(); - if(lowerName.contains(ImageActor.B64)) { - ImageActor actor = new ImageActor(); - String fromName = fName.replace(ImageActor.B64, ""); - File fromFile = new File(e.getHttpContext().getAttributes().get(FileHandler.ATTR_FILE_BASE).toString(), fromName); - File toFile = new File(e.getHttpContext().getAttributes().get(FileHandler.ATTR_FILE_BASE).toString(), fName); - //logger.fine("from " + fromFile.getAbsolutePath() + ", to " + toFile.getAbsolutePath()); - if(!toFile.exists()) { - actor.b64Image(fromFile, toFile); - } - super.handle(e); - } else { - super.handle(e); - } - } - } - - // data:[<mime type>][;charset=<Zeichensatz>][;base64],<Daten> - /* - [So. Juni 13 13:23:32 MESZ 2021] FEIN: - file: /home/ulrich/helix-files/bild-test/10419903-14-2-1920-r.jpg, - relname: bild-test/10419903-14-2-1920-r.jpg, ohneExt: 10419903-14-2-1920-r, ext: .jpg (de.uhilger.helix.FileManager buildImgSrc) - - */ - private void buildImgSrc(File file, Datei datei, String ohneExt, String ext) throws IOException { - //logger.fine("file: " + file.getAbsolutePath() + ", ohneExt: " + ohneExt + ", ext: " + ext); - File dir = file.getParentFile(); - String newRelName = ohneExt + ImageActor.TN + ImageActor.B64 + ext; - File b64File = new File(dir, newRelName); - //logger.fine("b64File: " + b64File.getAbsolutePath()); - if(!b64File.exists()) { - //BildErzeuger be = new BildErzeuger(); - //be.bildErzeugen(dir, newRelName, BildErzeuger.TN, 120, b64File); - ImageThread it = new ImageThread(dir, newRelName, ImageActor.TN, 120, b64File, datei, ext); - it.addListener(this); - if(threadCount < maxThreads) { - ++threadCount; - //logger.fine("Thread started, threadCount: " + threadCount); - it.start(); - } else { - waitingThreads.add(it); - //logger.fine("Thread added to wait queue."); - } - } else { - ImageActor be = new ImageActor(); - be.setImgSrc(datei, ext, b64File); - } - } - - @Override - public void finished() { - --threadCount; - //logger.fine("Thread finished, threadCound now: " + threadCount); - if (threadCount < maxThreads) { - if (waitingThreads.size() > 0) { - Object o = waitingThreads.get(0); - if (o instanceof ImageThread) { - waitingThreads.remove(o); - ImageThread it = (ImageThread) o; - ++threadCount; - //logger.fine("Thread started from wait queue, threadCount now: " + threadCount); - it.start(); - } - } - } - } private void emptyListResponse(HttpExchange e) throws IOException { HttpResponder r = new HttpResponder(); @@ -462,45 +327,8 @@ private void copyOrMove(HttpExchange exchange, String quelle, String ziel, int op) throws IOException { //logger.fine("quelle: " + quelle + ", ziel: " + ziel); String[] dateiNamen = dateiliste(exchange); - copyOrMoveFiles(quelle, ziel, dateiNamen, op, exchange); + new Mover().copyOrMoveFiles(quelle, ziel, dateiNamen, op, exchange.getHttpContext().getAttributes().get(FileHandler.ATTR_FILE_BASE).toString()); standardHeaderUndAntwort(exchange, SC_OK, "Dateien verarbeitet."); - } - - private String copyOrMoveFiles(String fromPath, String toPath, String[] fileNames, int operation, HttpExchange e) throws IOException { - String result = null; - File srcDir = new File(e.getHttpContext().getAttributes().get(FileHandler.ATTR_FILE_BASE).toString(), fromPath); - File targetDir = new File(e.getHttpContext().getAttributes().get(FileHandler.ATTR_FILE_BASE).toString(), toPath); - for (String fileName : fileNames) { - File srcFile = new File(srcDir, fileName); - //logger.fine("srcFile: " + srcFile); - if (srcFile.isDirectory()) { - //logger.fine("srcFile is directory."); - OrdnerBearbeiter bearbeiter = new OrdnerBearbeiter(); - bearbeiter.setTargetDir(targetDir.toPath()); - bearbeiter.setOperation(operation); - Files.walkFileTree(srcFile.toPath(), bearbeiter); - } else { - Path source = srcFile.toPath(); - File destFile = targetDir.toPath().resolve(source.getFileName()).toFile(); - if (destFile.exists()) { - FileTransporter trans = new FileTransporter(); - destFile = trans.getNewFileName(destFile); - } - if (operation == OP_MOVE) { - String fname = srcFile.getName().toLowerCase(); - if (fname.endsWith(ImageActor.JPEG) - || fname.endsWith(ImageActor.JPG) - || fname.endsWith(ImageActor.PNG)) { - moveImgFilesToDirectory(srcFile, srcDir, targetDir, false); - } else { - Files.move(source, destFile.toPath()); - } - } else { - Files.copy(source, destFile.toPath()); - } - } - } - return result; } private void loeschen(HttpExchange exchange, HttpHelper helper) throws IOException { @@ -517,40 +345,7 @@ return gson.fromJson(body, String[].class); } - public String duplizieren(HttpExchange exchange, HttpHelper helper) throws IOException { - String relPfad = helper.getFileName(exchange); - File srcFile = new File(exchange.getHttpContext().getAttributes().get(FileHandler.ATTR_FILE_BASE).toString(), relPfad); - String fnameext = srcFile.getName(); - int dotpos = fnameext.lastIndexOf(STR_DOT); - String fname = fnameext.substring(0, dotpos); - String ext = fnameext.substring(dotpos); - File srcDir = srcFile.getParentFile(); - File destFile = new File(srcDir, fname + "-Kopie" + ext); - int i = 1; - while (destFile.exists()) { - destFile = new File(srcDir, fname + "-Kopie-" + Integer.toString(++i) + ext); - } - Files.copy(srcFile.toPath(), destFile.toPath()); - return destFile.getName(); - } - - private void moveImgFilesToDirectory(File srcFile, File srcDir, File targetDir, boolean createDestDir) throws IOException { - String fnameext = srcFile.getName(); - int dotpos = fnameext.lastIndexOf(STR_DOT); - 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())); - } - stream.close(); - } - private void standardHeaderUndAntwort(HttpExchange exchange, int status, String antwort) throws IOException { Headers resHeaders = exchange.getResponseHeaders(); resHeaders.add(CONTENT_TYPE, HttpHelper.CT_TEXT_HTML); diff --git a/src/de/uhilger/httpserver/cm/actor/Lister.java b/src/de/uhilger/httpserver/cm/actor/Lister.java new file mode 100644 index 0000000..f76eb90 --- /dev/null +++ b/src/de/uhilger/httpserver/cm/actor/Lister.java @@ -0,0 +1,184 @@ +/* + http-cm - File management extensions to jdk.httpserver + Copyright (C) 2021 Ulrich Hilger + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + */ +package de.uhilger.httpserver.cm.actor; + +import com.google.gson.Gson; +import com.sun.net.httpserver.HttpExchange; +import de.uhilger.httpserver.base.HttpHelper; +import de.uhilger.httpserver.base.HttpResponder; +import de.uhilger.httpserver.base.handler.FileHandler; +import static de.uhilger.httpserver.base.handler.FileHandler.SC_OK; +import de.uhilger.httpserver.cm.DirList; +import de.uhilger.httpserver.cm.FileManager; +import static de.uhilger.httpserver.cm.FileManager.STR_DOT; +import static de.uhilger.httpserver.cm.FileManager.STR_SLASH; +import de.uhilger.httpserver.cm.ImageFileFilter; +import de.uhilger.httpserver.image.Datei; +import de.uhilger.httpserver.image.ImageActor; +import de.uhilger.httpserver.image.ImageThread; +import de.uhilger.httpserver.image.ImageThread.ThreadListener; +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * Klasse zum Erzeugen von Dateilisten + * + * @author Ulrich Hilger, 15. Januar 2024 + */ +public class Lister implements ThreadListener { + + private final List waitingThreads; + private final int maxThreads; + private int threadCount; + + public Lister() { + waitingThreads = new ArrayList(); + maxThreads = 4; + threadCount = 0; + } + + public String liste(String fName, String ctxPath, String base, String path) throws IOException { + String dirListPath = ctxPath + fName; + //if (path.endsWith(STR_SLASH)) { + //logger.fine("fName: " + fName); + File dir = new File(base, fName); + //logger.fine("absPath: " + dir.getAbsolutePath()); + File[] files = dir.listFiles(new ImageFileFilter()); + if(files != null && files.length > 0) { + Arrays.sort(files); + ArrayList liste = new ArrayList(); + for (File file : files) { + Datei datei = new Datei(); + String dateiName = file.getName(); + datei.setName(dateiName); + if (file.isDirectory()) { + datei.setTyp(Datei.TYP_ORDNER); + } else { + datei.setTyp(Datei.TYP_DATEI); + } + //datei.setPfad(e.getHttpContext().getPath() + fName); + String lowerName = dateiName.toLowerCase(); + if (lowerName.endsWith(ImageActor.JPEG) + || lowerName.endsWith(ImageActor.JPG) + || lowerName.endsWith(ImageActor.PNG)) { + datei.setBild(true); + String ext = dateiName.substring(dateiName.lastIndexOf(STR_DOT)); + String ohneExt = dateiName.substring(0, dateiName.lastIndexOf(STR_DOT)); + datei.setMiniurl(ohneExt + ImageActor.TN + ext); + buildImgSrc(file, datei, ohneExt, ext); + } + liste.add(datei); + } + while(threadCount > 0) { + try { + Thread.sleep(50); + } catch (InterruptedException ex) { + Logger.getLogger(FileManager.class.getName()).log(Level.SEVERE, null, ex); + } + } + if(liste.size() > 0) { + DirList list = new DirList(); + list.setPfad(dirListPath); + list.setDateien(liste); + Gson gson = new Gson(); + //String json = gson.toJson(liste); + String json = gson.toJson(list); + //byte[] bytes = json.getBytes(); + //logger.fine("json: '" + json + "'"); + return json; + } else { + return null; + } + } else { + return null; + } + //} else { + //} + } + + public void b64Action(String fName, String base) throws IOException { + String lowerName = fName.toLowerCase(); + if(lowerName.contains(ImageActor.B64)) { + ImageActor actor = new ImageActor(); + String fromName = fName.replace(ImageActor.B64, ""); + File fromFile = new File(base, fromName); + File toFile = new File(base, fName); + //logger.fine("from " + fromFile.getAbsolutePath() + ", to " + toFile.getAbsolutePath()); + if(!toFile.exists()) { + actor.b64Image(fromFile, toFile); + } + } + } + + // data:[<mime type>][;charset=<Zeichensatz>][;base64],<Daten> + /* + [So. Juni 13 13:23:32 MESZ 2021] FEIN: + file: /home/ulrich/helix-files/bild-test/10419903-14-2-1920-r.jpg, + relname: bild-test/10419903-14-2-1920-r.jpg, ohneExt: 10419903-14-2-1920-r, ext: .jpg (de.uhilger.helix.FileManager buildImgSrc) + + */ + private void buildImgSrc(File file, Datei datei, String ohneExt, String ext) throws IOException { + //logger.fine("file: " + file.getAbsolutePath() + ", ohneExt: " + ohneExt + ", ext: " + ext); + File dir = file.getParentFile(); + String newRelName = ohneExt + ImageActor.TN + ImageActor.B64 + ext; + File b64File = new File(dir, newRelName); + //logger.fine("b64File: " + b64File.getAbsolutePath()); + if(!b64File.exists()) { + //BildErzeuger be = new BildErzeuger(); + //be.bildErzeugen(dir, newRelName, BildErzeuger.TN, 120, b64File); + ImageThread it = new ImageThread(dir, newRelName, ImageActor.TN, 120, b64File, datei, ext); + it.addListener(this); + if(threadCount < maxThreads) { + ++threadCount; + //logger.fine("Thread started, threadCount: " + threadCount); + it.start(); + } else { + waitingThreads.add(it); + //logger.fine("Thread added to wait queue."); + } + } else { + ImageActor be = new ImageActor(); + be.setImgSrc(datei, ext, b64File); + } + } + + @Override + public void finished() { + --threadCount; + //logger.fine("Thread finished, threadCound now: " + threadCount); + if (threadCount < maxThreads) { + if (waitingThreads.size() > 0) { + Object o = waitingThreads.get(0); + if (o instanceof ImageThread) { + waitingThreads.remove(o); + ImageThread it = (ImageThread) o; + ++threadCount; + //logger.fine("Thread started from wait queue, threadCount now: " + threadCount); + it.start(); + } + } + } + } + + +} diff --git a/src/de/uhilger/httpserver/cm/actor/Mover.java b/src/de/uhilger/httpserver/cm/actor/Mover.java new file mode 100644 index 0000000..0157096 --- /dev/null +++ b/src/de/uhilger/httpserver/cm/actor/Mover.java @@ -0,0 +1,111 @@ +/* + http-cm - File management extensions to jdk.httpserver + Copyright (C) 2021 Ulrich Hilger + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + */ +package de.uhilger.httpserver.cm.actor; + +import com.sun.net.httpserver.HttpExchange; +import de.uhilger.httpserver.base.HttpHelper; +import de.uhilger.httpserver.base.handler.FileHandler; +import static de.uhilger.httpserver.base.handler.FileHandler.SC_OK; +import static de.uhilger.httpserver.cm.FileManager.OP_MOVE; +import static de.uhilger.httpserver.cm.FileManager.STR_DOT; +import de.uhilger.httpserver.cm.FileTransporter; +import de.uhilger.httpserver.cm.OrdnerBearbeiter; +import de.uhilger.httpserver.image.ImageActor; +import java.io.File; +import java.io.IOException; +import java.nio.file.DirectoryStream; +import java.nio.file.Files; +import java.nio.file.Path; + +/** + * Eine Klasse mit Methoden zum Kopieren und Verschieben von Dateien + * + * @author Ulrich Hilger, 15. Janaur 2024 + */ +public class Mover { + public String 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."); + OrdnerBearbeiter bearbeiter = new OrdnerBearbeiter(); + bearbeiter.setTargetDir(targetDir.toPath()); + bearbeiter.setOperation(operation); + Files.walkFileTree(srcFile.toPath(), bearbeiter); + } else { + Path source = srcFile.toPath(); + File destFile = targetDir.toPath().resolve(source.getFileName()).toFile(); + if (destFile.exists()) { + FileTransporter trans = new FileTransporter(); + destFile = trans.getNewFileName(destFile); + } + if (operation == OP_MOVE) { + String fname = srcFile.getName().toLowerCase(); + if (fname.endsWith(ImageActor.JPEG) + || fname.endsWith(ImageActor.JPG) + || fname.endsWith(ImageActor.PNG)) { + moveImgFilesToDirectory(srcFile, srcDir, targetDir, false); + } else { + Files.move(source, destFile.toPath()); + } + } else { + Files.copy(source, destFile.toPath()); + } + } + } + return result; + } + + private void moveImgFilesToDirectory(File srcFile, File srcDir, File targetDir, boolean createDestDir) throws IOException { + String fnameext = srcFile.getName(); + int dotpos = fnameext.lastIndexOf(STR_DOT); + 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())); + } + stream.close(); + } + + public String duplizieren(String base, String relPfad) throws IOException { + File srcFile = new File(base, relPfad); + String fnameext = srcFile.getName(); + int dotpos = fnameext.lastIndexOf(STR_DOT); + String fname = fnameext.substring(0, dotpos); + String ext = fnameext.substring(dotpos); + File srcDir = srcFile.getParentFile(); + File destFile = new File(srcDir, fname + "-Kopie" + ext); + int i = 1; + while (destFile.exists()) { + destFile = new File(srcDir, fname + "-Kopie-" + Integer.toString(++i) + ext); + } + Files.copy(srcFile.toPath(), destFile.toPath()); + return destFile.getName(); + } + + +} -- Gitblit v1.9.3