Grosse Dateien kopieren/Verschieben

Status
Nicht offen für weitere Antworten.

scaary

Bekanntes Mitglied
Hallo.

Mein Programm soll "grosse" Dateien (~10 MB) kopieren koennen, und das in einer akzeptablen Zeit.

Mein Code schaut wie folgt aus:
Java:
	public static void moveFilesToDestination(File[] list, String destination) throws IOException, PersonAlreadyExists {
		for (int i = 0; i < list.length; ++i) {
			if (list[i] != null) {
				File file = list[i];
				String newDestination = folderApplications + destination + "\\";
				File newFile = new File(newDestination + file.getName());
				newFile.createNewFile();
				writeNewFileContent(newFile, getFileContent(file));
				file.delete();		
			}
		}
	}

Dabei wird eine Liste von Dateien uebergeben, die an die angegebene Adresse kopiert wird.

Bei kleinen Datein, kein Problem.

Ist die Datei allerdings 8 MB oder so gross, dauert das ganze schon wieder ewig (min 10 minuten).

Das kanns ja nicht sein.

Ich hab mich dann ein wenig im Internet schlau gemacht, und von NIO gehoert.

Hab hierfuer auch einige Beispiele gefunden:

Schnell große Dateien kopieren mit Java NIO - Java @ tutorials.de: Forum, Tutorial, Anleitung, Schulung & Hilfe
(um nur mal eins zu nennen).

Aber auch dafuer bruacht das Programm ewig.

Was mach ich falsch?

und gibt es eine bessere Loesung?

Danke!

LG scaary
 

faetzminator

Gesperrter Benutzer
Wenn die Datei auf der gleichen Partition bleibt, muss nur der Header überschrieben werden und es geht in wenigen ms.

Edit: @Illuvatar, ups, den hab ich vergessen :)
 
Zuletzt bearbeitet:

scaary

Bekanntes Mitglied
Mhh, ich kann leide rnicht davon ausgehen, dass sie auf der selben Partition bleiben :(

Edit:

Haett ich erwaehnen sollen:

Zumal es auch sein kann, dass selbe Dateien an verschiedene Orte kopiert werden muessen.
 

Wildcard

Top Contributor
8MB kopieren 10 Minuten? Wie schaut denn getFileContent und writeNewFileContent aus?
Mit NIO und transferTo geht das sehr schnell.
 

scaary

Bekanntes Mitglied
Hier die eiden anderen methoden:


/**
* Get text content from a file.
*
* @param file
* @return
* @throws IOException
*/
Java:
	public static String getFileContent(File file) throws IOException {
		String result = "";
		String tmp = "";
		reader = new BufferedReader(new FileReader(file));
		do {
			tmp = reader.readLine();
			if (tmp != null) {
				result = result + tmp;
			}
		} while (tmp != null);
		reader.close();
		return result;
	}

/**
* Write text content in a file.
* @param file
* @param text
* @throws IOException
*/

Java:
public static void writeNewFileContent(File file, String text) throws IOException {
		if(file.exists()) {
			output = new FileWriter(file);
			output.write(text);
			output.close();
		} else {
			throw (new FileNotFoundException());
		}
	}

Aber wie gesagt, ich hatte die Methode auch schon komplett mit dieser ersetzt:
Schnell große Dateien kopieren mit Java NIO - Java @ tutorials.de: Forum, Tutorial, Anleitung, Schulung & Hilfe

Damit haette es ja schneller gehen sollen, oder?
 

ARadauer

Top Contributor
also mit nio mach ich das immer so... versuch genau mal diesen code

Java:
public static void copyFileNio(File srcFile, File destFile) throws IOException {
		FileChannel inChannel = new	FileInputStream(srcFile).getChannel();
		FileChannel outChannel = new FileOutputStream(destFile).getChannel();
		try {
			inChannel.transferTo(0, inChannel.size(),outChannel);
		}
		catch (IOException e) {
			throw e;
		}
		finally {
			if (inChannel != null) inChannel.close();
			if (outChannel != null) outChannel.close();
		}
	}
 

scaary

Bekanntes Mitglied
so nen aehnlichen hatte ich schonmal drin, habs aber grade nochmal mit deinem programm versucht.

EIne 8MB PDF weigert sich wehement schnell kopiert zu werden, also nach wie vor selbes problem... .

Ist doch seltsam, oder?

Kleine Dateien werden ohne probleme kopiert (also kanns auch kein Fehler irgendwo anders sein).
 

Wildcard

Top Contributor
Das dein Code langsam ist wundert nicht. Du hast dir die sowohl in Bezug auf Laufzeit, als auch Memory Footprint so ziemlich die schlechtest mögliche Variante ausgesucht. String + String und alles in den Speicher, beides für sich alleine schon Schlimm, kombiniert grässlich.
Das die NIO Variante nicht signifikant schneller sein soll wage ich zu Bezweifeln. Mach ein lauffähiges Beispiel mit gegebenem NIO Code und schau ob sich das Problem reproduzieren lässt.
 

scaary

Bekanntes Mitglied
Ahh, es funktioniert jetzt.

Ich weiss nicht warum, aber mit deinem Code, ARadauer, hat es funktioniert.

Sehr seltsam, aber es geht jetzt, habt vielen Dank.

Jetzt will ich mich mal drum kuemmern, den schwer kritisierten String mit dem Builder zu ersetzen (ich war bisher einfach zu faul, um ehrlich zu sein).

Habt trotzdem alle vielen Dank!

LG scaary
 

Wildcard

Top Contributor
Jetzt will ich mich mal drum kuemmern, den schwer kritisierten String mit dem Builder zu ersetzen (ich war bisher einfach zu faul, um ehrlich zu sein).
Nein. Wenn du Dateien kopieren willst, brauchst du dafür keine Strings, das ist langsamer, braucht mehr Speicher und bringt ganz neue Probleme wie Encoding. Man kopiert entweder per FileChannel, oder Per InputStream + OutputStream (oder PipedInput/OutputStream), nicht per String.
 

scaary

Bekanntes Mitglied
ah, OK.
Und wenn ich ne Datei nur auslesen moechte, kann ich da den inputStream direkt in nen String umleiten (oder gibt mir das dann kauderwelsch)?

Danke!
 

Wildcard

Top Contributor
Für Strings nimmt man normalerweise Reader. Wenn deine Quelle ein InputStream ist, dann nimmt man einen InputStreamReader. Das funktioniert allerdings nur für textuelle Inhalte und nur wenn das Encoding stimmt.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Grosse If / Else verschachtelung übersichlitcher gestlten Java Basics - Anfänger-Themen 6
O grosse Textdatei performant als string speichern Java Basics - Anfänger-Themen 8
S Datei Grosse Java Basics - Anfänger-Themen 2
H .java Dateien in Eclipse einbinden und ausführen Java Basics - Anfänger-Themen 1
I Dateien aus dem Resource Folder laden Java Basics - Anfänger-Themen 2
A Thread XML-Dateien zusammenfügen Java Basics - Anfänger-Themen 11
Buroto Threads Verschiedene .txt Dateien Auf Listen und Verbinden Java Basics - Anfänger-Themen 3
J Dateien lesen und schreiben Java Basics - Anfänger-Themen 5
B Jar Dateien ohne IDE verwenden? Java Basics - Anfänger-Themen 1
A Optimierung eines Programms: Mergen der Dateien Java Basics - Anfänger-Themen 23
A Zwei XML-Dateien Mergen Java Basics - Anfänger-Themen 14
A Input/Output Mehrere Csv-Dateien einlesen Java Basics - Anfänger-Themen 2
LetsSebi Dateien werden nicht in Zip gespeichert Java Basics - Anfänger-Themen 1
J Alle .java Dateien von einem Verzeichnis in eine Zip speichern Java Basics - Anfänger-Themen 2
J Alle Dateien aus einem Verzeichnis laden Java Basics - Anfänger-Themen 10
MiMa log4j als separate Dateien in Schleife? Java Basics - Anfänger-Themen 6
M Scannen von *.txt - Dateien; wo sind der oder die Fehler? Java Basics - Anfänger-Themen 4
A Input/Output Dateien einlesen und ausgeben Java Basics - Anfänger-Themen 7
S Lese- / Schreibfähigkeit von Dateien sicherstellen Java Basics - Anfänger-Themen 1
C "HelloWorld" - Dateien erstellt, aber ist es eine class-Datei? Java Basics - Anfänger-Themen 2
J Java findet plötzlich die Dateien im Projekt nicht mehr. Java Basics - Anfänger-Themen 12
J Dateien in Verzeichnissen rekursiv auflisten wirft Exception Java Basics - Anfänger-Themen 4
L Classpath Alle Dateien im Classpath finden Java Basics - Anfänger-Themen 4
MiMa Formate für Dateien und Pfade? Java Basics - Anfänger-Themen 1
O Datei in mehrere kleine Dateien umwandeln Java Basics - Anfänger-Themen 47
L Richtige Reihenfolge der Dateien Java Basics - Anfänger-Themen 5
CptK Datentypen Text Dateien einlesen Java Basics - Anfänger-Themen 3
J Logging erzeugt zwei dateien.... Java Basics - Anfänger-Themen 7
A Dateien Verschieben Java Basics - Anfänger-Themen 1
M Mehre Dateien parallel kopieren mit Multithreading Java Basics - Anfänger-Themen 8
C Methoden Dateien im Ordner anzeigen Java Basics - Anfänger-Themen 12
J Java-Dateien lassen sich nicht editieren Java Basics - Anfänger-Themen 46
E FTP Dateien hochladen Java Basics - Anfänger-Themen 3
J Probleme beim schreiben von Dateien Java Basics - Anfänger-Themen 5
Korvinus Vergleichen von 2 csv-Dateien Java Basics - Anfänger-Themen 2
I Texte mit Absätzen in Dateien speichern und auslesen Java Basics - Anfänger-Themen 1
M "substring()" mit Dateien und Pfadangaben Java Basics - Anfänger-Themen 5
Voreck Jar Dateien Standart programm ändern Java Basics - Anfänger-Themen 12
K Dateien aus Source-Package verwenden Java Basics - Anfänger-Themen 10
B Dateien aus dem "resource" - Folder kopieren in Verzeichnis Java Basics - Anfänger-Themen 9
B Kopieren von Dateien mit Adminberechtigungen Java Basics - Anfänger-Themen 14
F Threads ftp4j, viele Dateien upload Java Basics - Anfänger-Themen 5
P Einen Ordner mit Dateien hochladen [FTP] Java Basics - Anfänger-Themen 2
X Dateien direkt hintereinander schreiben, Dateiname Java Basics - Anfänger-Themen 25
G Messwerte in 2 Dateien schreiben Java Basics - Anfänger-Themen 20
C Verarbeitung von sehr großen Dateien Java Basics - Anfänger-Themen 52
F Input/Output Dateien lesen/schreiben Java Basics - Anfänger-Themen 1
V Mehrere Dateien aus JFileChooser in eine ArrayList speichern Java Basics - Anfänger-Themen 2
K Dateien lesen | IndexOutOfBoundsException Java Basics - Anfänger-Themen 2
T Classpath Problem mit dem auslesen von Text-Dateien (Pfad) Java Basics - Anfänger-Themen 3
A attach source: Zusammenhang zwischen JAR und .class/.java Dateien? Java Basics - Anfänger-Themen 2
T .jar Datei als Ordner benutzen/ Dateien aus .jar Datei auslesen Java Basics - Anfänger-Themen 3
C Klassen Class Files nachladen (mehrer .jar Dateien) Java Basics - Anfänger-Themen 2
Bluedaishi for schleife um Dateien wieder zusammen zu fügen Java Basics - Anfänger-Themen 11
S Resourcen-Dateien im Jar-File verfügbar machen (Intellij 14) Java Basics - Anfänger-Themen 14
J Dateien für anderen User "mitgeben" Java Basics - Anfänger-Themen 1
S Dateien mit Java verschieben Java Basics - Anfänger-Themen 6
A Heap Space Error bei rekursiver Suche in Dateien trotz nur einer Zeile im Speicher Java Basics - Anfänger-Themen 26
E Dateien werden nicht gelöscht Java Basics - Anfänger-Themen 10
S Class Dateien decompilieren Java Basics - Anfänger-Themen 4
T Fehler beim Schreiben in Dateien! Java Basics - Anfänger-Themen 4
Bluedaishi Dateien Lassen sich unter windows nicht löschen Java Basics - Anfänger-Themen 8
Z Mehrere XML-Dateien zu einer zusammenfügen Java Basics - Anfänger-Themen 3
K JAR Dateien einbinden - funkt nicht wie es sollte... Java Basics - Anfänger-Themen 22
M Threads nio Dateien kopieren, Threads und Gui Java Basics - Anfänger-Themen 0
J *.sql Dateien in Java Java Basics - Anfänger-Themen 1
P Dateien im Ordner auflisten. Java Basics - Anfänger-Themen 3
P Compiler-Fehler .java Dateien kompilieren und .class Dateien zur .jar Java Basics - Anfänger-Themen 4
S Daten aus anderen Dateien in neue Datei einlesen Java Basics - Anfänger-Themen 3
M Input/Output Arbeiten mit extrem vielen Dateien Java Basics - Anfänger-Themen 8
R File chooser Dateien in frame anzeigen lassen Java Basics - Anfänger-Themen 5
N tar-Dateien Java Basics - Anfänger-Themen 6
B Methoden Dateien konvertieren Java Basics - Anfänger-Themen 3
L Dateien speichern/auslesen Java Basics - Anfänger-Themen 5
M Input/Output Probleme beim Parsen von CSV und TXT Dateien Java Basics - Anfänger-Themen 7
P Wiedereinstieg und kann keine Dateien mehr öffnen... Java Basics - Anfänger-Themen 13
F Classpath Dateien einbinden und Classpath durchsuchen Java Basics - Anfänger-Themen 2
N Java Programm zum Suchen und Ersetzen von Text Dateien Java Basics - Anfänger-Themen 10
S Dateien/LinkedList/StringBuffer - SOrtierung klappt nicht so ganz Java Basics - Anfänger-Themen 2
U Best Practice Nicht-permanente Links auf Dateien Java Basics - Anfänger-Themen 5
B In welchem (Default) Pfad erstellt Java Dateien? Java Basics - Anfänger-Themen 4
I Methoden zum lesen und speichern von Dateien Java Basics - Anfänger-Themen 2
B .ut dateien ignorieren und fortsetzen Java Basics - Anfänger-Themen 9
R Ressourcen in JAR-Dateien Java Basics - Anfänger-Themen 2
J jar Dateien global erreichbar machen Java Basics - Anfänger-Themen 3
L Zusammenführen mehrerer .txt Dateien Java Basics - Anfänger-Themen 4
M Dateien erstellen/ bearbeiten/ lesen Java Basics - Anfänger-Themen 9
S Dateien in RAM kopieren und ausführen? Java Basics - Anfänger-Themen 4
O Java Dateien verschlüsseln? Java Basics - Anfänger-Themen 22
K Unterschied zwischen Jar, war und ear Dateien Java Basics - Anfänger-Themen 3
B Dateien kopieren, entpacken, XML auslesen! Java Basics - Anfänger-Themen 7
B Dateien Verschieben! Java Basics - Anfänger-Themen 8
B ältere Dateien verschieben Java Basics - Anfänger-Themen 3
G Erste Schritte Nach bestimmten Dateien suchen und dann in die Registry schreiben. Java Basics - Anfänger-Themen 6
J Laden von Dateien Java Basics - Anfänger-Themen 19
I Xml dateien zusammenfügen Java Basics - Anfänger-Themen 12
I Dateien in Ordner und Unterordner durchsuchen Java Basics - Anfänger-Themen 18
J Markierte Einträge (Dateien) in JList sollen in einen anderen Ordner verschoben werden. Java Basics - Anfänger-Themen 12
N Input/Output Große Dateien schnell Speichern/auslesen Java Basics - Anfänger-Themen 16
L Klassen Ich kann keine .jar Dateien mehr öffnen Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben