[Java] Wie Dateien/Ordner kopieren/verschieben?

Kamikatze

Captain
Registriert
Okt. 2004
Beiträge
3.708
Heyho!

Wie kann ich unter Java am besten Dateien bzw. Ordner kopieren und verschieben?

Verschieben funktioniert zwar mit quelle.renameTo(ziel) - aber auch nur wenn sich die beiden Pfade auf derselben Partition befinden.

Vielen Dank!

EDIT:
Gerade noch das hier gefunden:
Moving to another volume is more difficult, since this actually involves copying the file, and there is no standard Java call to copy a file.
Gibt es denn wirklich gar nichts, was mir ein bisschen Arbeit abnehmen würde? Ich kann es kaum glauben... :freak:

EDIT 2:
Ist es vllt. möglich mit dem ProcessBuilder einen entsprechenden Windows-Befehl aufzurufen? Plattformunabhängigkeit ist vorerst mal egal. Wenn ja, wie lauten die Befehle?


----

So, ich hab es inzwischen geschafft einen Ordner (über die cmd und xcopy) zu kopieren:

Code:
zielordner.mkdirs();
new ProcessBuilder("cmd", "/c", "xcopy", quellordner, zielordner, "/E", "/H").start();

Das funktioniert soweit, nur jetzt hab ich noch ein anderes Problem - und zwar beim Verschieben. Da wird danach noch die selbstgeschriebene Methode
Code:
[B]public void deleteDirectory(File dir)[/B] {
        if ((dir != null) && dir.exists()) {
            for (File file : dir.listFiles()) {
                if (file.isDirectory()) {
                    deleteDirectory(file);
                }
                
                file.delete();
            }
            
            dir.delete();
        }
    }
aufgerufen.

Nur löscht diese das Quellverzeichnis, bevor die Dateien überhaupt kopiert worden sind. Kann ich irgendwie das Ende des anderen Prozesses abwarten und diese Methode erst dann aufrufen?
 
Zuletzt bearbeitet:
Heyho... funktioniert ja schon fast alles... brauch jetzt eigentlich nur mehr herausfinden, wie ich auf die Beendigung des Prozesses warte und dann mein eigenes Programm auch wieder fortsetzen kann.

Hab es jetzt so gemacht, nur wird mein eigenes Programm danach eben nicht mehr fortgesetzt:
Code:
ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "xcopy", quellordner, zielordner, "/E", "/H");
Process p = pb.start();
p.waitFor();
deleteDirectory(new File(quellordner));

Das Problem:
Achtung: waitFor() wartet ewig, sofern noch Daten abgeholt werden müssen, wenn etwa das externe Programm in den Ausgabestrom schreibt. Ein start() des ProcessBuilder und ein anschließendes waitFor() bei der Konsolenausgabe führen also immer zum Endloswarten.
 
Zurück
Oben