Dateien mittels Path(s) kopieren und umbenennen.

snibbe

Mitglied
Hallo,
ich habe folgendes Problem beim Kopieren einer beliebigen Datei.

Der Benutzer kann über jFileChooser eine Datei wählen.
Existiert diese, so kann der Benutzer diese optional kopieren.

Der Dateiname der Kopie ist mit der gewählten Datei identisch. Allerdings soll noch "Kopie" mit angehängt werden. Also z.B. test.txt wird zu testKopie.txt. Die Endungen wechseln immer, je nach ausgewählter Datei. Der Zielpfad ist immer da, wo auch die eingelesene Datei liegt.

Das Auswählen und auch kopieren klappt. Nur Den Dateinamen bekomme ich nicht realisiert.

Java:
...
// Ausschnitt vom Einlesen mittels jFileChooser
String dateipfad = dateiauswahl.getSelectedFile().getAbsolutePath();
...
// Kopieroption, bei klicken auf Ja mittels Fenster von JOptionPane
					if (kopieren == JOptionPane.YES_OPTION) {
												
						System.out.println("\nDer Kopiervorgang wird gestartet.");
																	
						Path test = Paths.get(dateipfad);
						Path kopie = Paths.get(dateipfad + "Kopie");
						
						try {
							Files.copy(test, kopie, StandardCopyOption.REPLACE_EXISTING);
							System.out.println("Der Kopiervorgang wurde erfolgreich beendet.");
							
						} catch (IOException e) {
							e.printStackTrace();
						  }
						  							
					}
...

Bei
Java:
Paths.get(dateipfad + "Kopie");
wird das Kopie zwar angehängt, allerdings hinter die Dateiendung, so dass man die Datei nicht einfach öffnen kann, sondern erst umbenennen oder das dazugehörige Programm wählen muss. Bringe ich den String "Kopie" vor dateipfad, so gibt es eine java.nio.file.InvalidPathException.

Ist mein Vorhaben so überhaupt möglich? Und wenn ja, wie könnte ich mein Problem lösen.

Vielen Dank im Voraus.
 
Ich hab das jetzt mal aus nem alten Projekt kopiert, bei dem ich ein ähnliches Problem hatte.

Java:
public static void copyFile(File in, File out) throws IOException {
        FileChannel inChannel = new FileInputStream(in).getChannel();
        FileChannel outChannel = new FileOutputStream(out).getChannel(); 
        inChannel.transferTo(0, inChannel.size(), outChannel);
    }
vielleicht hilfts ja.
 
Hätte da mal ne idee, auch relativ simpel.
Den String, in dem der Pfad der zu kopierenden Datei steht char für char rückwärts durchgehen.
wenn man auf den Punkt stößt ( '.' ) dann splittet man den String in Pfad und Dateiendung.
dann brauch man "kopie" nur dazwischen zu schieben und ihn zusammen zu setzen.

mfg
 
Aso ^^ zu meinem Code musst du natürlich 2 File-Objekte übergeben.
Diese musst du natürlich vorher "berechnen" bzw. erzeugen.
Ich hab jetzt leider keine IDE hier auf Arbeit aber File hat die Methode#getName();
Dann hast du den Dateinamen. Der Rest ist echt nur noch Denksport.
Ich schreib nochmal was dazu, wenn ich zuhause bin.
 

Zurück
Oben