Datein kopieren: File oder xcopy? Was ist schneller?

Acid

Mitglied
Moin, ich hab ein Programm mit dem ich Datein von einen Ort in einen anderen Ort kopieren kann. Die Dateien können relativ groß sein, 1GB ist dabei keine seltenheit denke ich.
Ich hab nun eine Methode die Mithilfe der Klasse java.io.File dies auch umsetzen kann. Das dauert nun recht lange.
Meine Frage: Ist es besser von Geschwindigkeit, wenn ich mit xcopy arbeite und die Datein quasi über die cmd kopiere?
 
Ja moment, ich hab gerade noch ein anderes Problem. Un zwar muss ich zusätzlich noch einen Ordner erstellen. Das wollt ich mit diesen Befehl machen:

Java:
process = Runtime.getRuntime().exec("mkdir C:\\Users\\Thomas\\Desktop\\Test");

Also es soll ein Ordner mit den Namen "Test" erstellt werden
Ich bekomm aber ein Fehler:
Code:
SCHWERWIEGEND: null
java.io.IOException: Cannot run program "mkdir": CreateProcess error=2, Das System kann die angegebene Datei nicht finden

Woran kann es liegen das der Befehl nicht ausgeführt werden kann?
 
warum willst du sowas mit batch machen, wenn du die die komplette java api zur verfügung hast ???:L
das wäre ungefähr so wie wenn du einen porsche besitzt und ihn aber schiebst, statt zu fahren 🙂
 
Hallo Acid,

Ja moment, ich hab gerade noch ein anderes Problem. Un zwar muss ich zusätzlich noch einen Ordner erstellen. Das wollt ich mit diesen Befehl machen:

Java:
process = Runtime.getRuntime().exec("mkdir C:\\Users\\Thomas\\Desktop\\Test");

Also es soll ein Ordner mit den Namen "Test" erstellt werden
Ich bekomm aber ein Fehler:
Code:
SCHWERWIEGEND: null
java.io.IOException: Cannot run program "mkdir": CreateProcess error=2, Das System kann die angegebene Datei nicht finden

Woran kann es liegen das der Befehl nicht ausgeführt werden kann?

und wenn doch per Shell...


mkdir ist kein Programm, sondern ein Shell-internes Kommando.

Also müsste es in etwa so wie folgt aussehen:

Java:
process = Runtime.getRuntime().exec("cmd /c mkdir C:\\Users\\Thomas\\Desktop\\Test");

Wobei ich es, schon aus Gründen der BS-Unabhängigkeit, auch nicht per Shell machen würde.

VG ROlf
 
Ich wills ja nicht unbedingt mit ner batch machen, mir würde es besser passen des mit der File Klasse zu machen. Mein Frage war ja, ob es vielleicht schneller über die batch geht. Aber so wie es aussieht ist das nicht der fall.
Das ist übrigens die Methode die ich verwende:
Java:
public void copyDir(File quelle, File ziel) throws FileNotFoundException, IOException {
		
	File[] files = quelle.listFiles();
	File newFile = null; // in diesem Objekt wird für jedes File der Zielpfad gespeichert.
			     // 1. Der alte Zielpfad
			     // 2. Das systemspezifische Pfadtrennungszeichen
			     // 3. Der Name des aktuellen Ordners/der aktuellen Datei
	ziel.mkdirs();	     // erstellt alle benötigten Ordner
	if (files != null) {
		for (int i = 0; i < files.length; i++) {
				newFile = new File(ziel.getAbsolutePath() + System.getProperty("file.separator") + files[i].getName());
			if (files[i].isDirectory()) {
				copyDir(files[i], newFile);
			}
			else {
				copyFile(files[i], newFile);
			}
		}
	}
}

Den code hab ich hier im Forum gefunden:
http://www.java-forum.org/allgemeines/33129-verzeichnisse-durchsuchen-bearbeiten-auslesen.html
 
Such noch nach einer NIO statt IO Lösung für [c]copyFile[/c], dann sollte es genug schnell sein 😉 Beispielmethode in meinem Link:
Java:
public static void copyFile(File sourceFile, File destFile) throws IOException {
 if(!destFile.exists()) {
  destFile.createNewFile();
 }
 
 FileChannel source = null;
 FileChannel destination = null;
 try {
  source = new FileInputStream(sourceFile).getChannel();
  destination = new FileOutputStream(destFile).getChannel();
  destination.transferFrom(source, 0, source.size());
 }
 finally {
  if(source != null) {
   source.close();
  }
  if(destination != null) {
   destination.close();
  }
}
 

Neue Themen


Zurück
Oben