/*
|
fm - File management class library
|
Copyright (C) 2024 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.fm;
|
|
import java.io.File;
|
import java.io.IOException;
|
import java.nio.file.Files;
|
|
/**
|
* Eine Datei duplizieren
|
*
|
* @author Ulrich Hilger
|
* @version 0.1, 08.11.2024
|
*/
|
public class Duplicator {
|
|
/**
|
* Eine Datei duplizieren. Es entsteht eine neue Datei mit Namen
|
* [Dateiname]-Kopie.[Endung], d.h. eine Datei namens datei.txt
|
* wird dupliziert in datei-Kopie.txt
|
*
|
* Wenn die Zieldatei bereits existiert, wird der neuen Datei eine
|
* laufende Nummer angehaengt, d.h. aus datei.txt wird datei-Kopie-1.txt,
|
* wenn datei-Kopie.txt bereits existiert.
|
*
|
* @param base der absolute Basispfad
|
* @param relPfad relative Pfad nebst Name der zu duplizierenden Datei
|
* @return Name des erstellten Duplikats
|
* @throws IOException wenn etwas schief geht
|
*/
|
public String duplizieren(String base, String relPfad) throws IOException {
|
File srcFile = new File(base, relPfad);
|
String fnameext = srcFile.getName();
|
int dotpos = fnameext.lastIndexOf(".");
|
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();
|
}
|
|
}
|