TXT-Datei blockweise auslesen

Eine 1:1 Kopie soll es nur bedingt sein. Der Inhalt der Dateien soll nicht verändert werden, lediglich soll aus 2 Dateien eine werden, wobei der Inhalt einfach nur dran gehängt wird. Ich werd seine Methode nun mal probieren.

Mir fällte gerade noch ein Java 7 bietet mit der Files Klasse ein paar praktische Methoden welche das noch einfacher machen könnten. Vermutlich würde sowas funktionieren (ich habs nicht ausprobiert):

out = new BufferedOutputStream(out);
Files.copy(sourcePath1, out);
Files.copy(sourcePath2, out);
out.close();```

[Edit: [Files Dokumentation](http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html)]

Vollste Zustimmung(von einem Neuen)

[QUOTE=Beni]Mir fällte gerade noch ein Java 7 bietet mit der Files Klasse ein paar praktische Methoden welche das noch einfacher machen könnten. Vermutlich würde sowas funktionieren (ich habs nicht ausprobiert):

out = new BufferedOutputStream(out);
Files.copy(sourcePath1, out);
Files.copy(sourcePath2, out);
out.close();```

[Edit: [Files Dokumentation](http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html)][/QUOTE]

Das sieht mir aber nicht mehr nach einer Kopie des Inhalts, sondern nach einer Kopie der Datei oder sehe ich das falsch? :D

Gibts da einen Unterschied? Soweit ich die Doku verstehe, bleiben die alten Dateien unverändert, und es wird eine neue angelegt. Oder missverstehe ich gerade deine Absichten?

Ich weiß nicht ob wir vom gleichen sprechen, ich versuche das mal anhand dieses Beispieles zu erklären.

Datei1 Inhalt:

eins
zwei
drei
vier

Datei 2 Inhalt:

fuenf
sechs
sieben
acht

Die zu erstellende Datei Inhalt:

eins
zwei
drei
vier
fuenf
sechs
sieben
acht

Ein Blick in die Doku würde die Frage beantworten.
Was ist denn das Speichern einer Kopie des Inhaltes einer Datei anderes als das Kopieren einer Datei? Eine Datei besteht nur aus Ihrem Inhalt (und einen Namen)

Muss zu meiner Schande gestehen, dass ich mich noch nicht grossartig mit Java 1.7 auseinander gesetzt habe. Die copy Methode macht intern genau dasselbe wie mein Bsp. Code nur das der Byte Buffer fest auf 8KB eingestellt ist.

Und um das Java 7 Kapitel abzuschliessen, damit kann man wunderbar Dateien aneinanderhängen. Wenn zwischen den Datein noch etwas rein muss, kann man das einfach in den “out” stream schreiben. Wenn du noch mehr Performance benötigst, dann hast du mit _Michaels Code allerdings mehr Chancen.


import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;

public class FileTest {
	public static void main(String[] args) {
		Path input1 = Paths.get("input1.txt");
		Path input2 = Paths.get("input2.txt");
		Path output = Paths.get("output.txt");

		try (OutputStream out = Files.newOutputStream(output, StandardOpenOption.CREATE);) {
			PrintWriter writer = new PrintWriter(out);
			
			Files.copy(input1, out);
			out.flush(); // <- sicherstellen, dass der Buffer leer ist
			
			writer.println();
			writer.flush();
			
			Files.copy(input2, out);
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}```

Ohne alles im Detail nachvollzogen zu haben, nur nebenbei: Wenn es wirklich nur um das Aneinanderhängen zweier Dateien geht, tut’s auch ein
copy /b test0.txt + test1.txt testResult.txt

(Unter Linux geht sowas vielleicht auch :o) )

Hallo cyan,

das binäre aneinanderhängen von 2 Dateien kann nur funktionieren, wenn die Dateien keinen Header haben. Bei einer Textdatei kann einem eigentlich nur das BOM (http://de.wikipedia.org/wiki/Byte_Order_Mark) in die Quere kommen. Das wird meines Wissens aber nur selten verwendet.

Wenn man zwei Dateien mit einem Header binär aneinanderhängt (z. B. mp3, avi etc.), kommt es wahrscheinlich auf das Abspiel-/Bearbeitungsprogramm an, ob diese neue Datei richtig verarbeitet wird.

MfG
hansmueller

Hallo,

Dein Code funktioniert genauso wie ich es brauche, ich danke dir dafür herzlichst. :slight_smile:

Die Performance ist mit unter einer Minute ebenfalls völlig zufriedenstellend.

Danke!