SequenceInputStream liest nur einen Stream

AvS

Erfahrenes Mitglied
Hi,

Aufgabe ist es, zwei Dateien auszulesen und in eine Datei zu schreiben.
Mein bisheriger Ansatz schreibt aber nur den Stream aus der ersten Datei in die "ausgabe.txt" Wäre nett, wenn sich das jemand mal ansieht :)

Java:
	public static void main(String[] args) throws IOException
	{
		int output;
		/* 	InputStreams */
		FileInputStream fis = new FileInputStream("MyFile.txt");
		FileInputStream fis_2 = new FileInputStream("hui.txt");
		InputStream sis = new SequenceInputStream(fis, fis_2);
		InputStreamReader irs = new InputStreamReader(sis);
		
		/*OutputStreams */
		FileOutputStream fos = new FileOutputStream("ausgabe.txt");
		while(irs.ready()){
		output = irs.read();
		fos.write(output);}
		irs.close();
		sis.close();
		fos.close();
	}
 
Hab lange nix mit Streams gemacht, aber beim schreiben empfiehlt es sich, wenn ich mich recht entsinne, vor dem close noch flush aufzurufen (koennte mir vorstellen dass dein 2. Stream einfach noch im Puffer haengt).
Java:
...
fos.write(output);
fos.flush();
...
 
Hallo,

die Verwendung der ready() Methode des InputStreamReaders gibt nur aus, ob der Stream bereit zum lesen ist und nicht, ob das Ende des Streams erreicht wurde. Der SequenceInputStream wird beim Wechsel von einem Stream auf den anderen sicher kurz blockieren, so dass ready() in dem Fall false zurück gibt und die while-Schleife abgebrochen wird.

Damit das ganze funktioniert, prüf einfach ab, ob read() einen Wert zurück gibt, der ungleich -1 ist, da -1 das Ende eines Streams markiert. Also ungefähr so:
Java:
while((output=irs.read())!=-1){
     fos.write(output);
}

Hinweis am Rande - du liest und schreibst zeichenweise ein. Das funktioniert zwar, ist aber vor allem bei großen Dateien grauenhaft imperformant.

hth
THMD
 
  • Gefällt mir
Reaktionen: AvS
Klasse, jetzt werden beide Streams eingelesen. Zum Thema Performance : Die Vorgabe war, die Systemklassen FileInputStream, InputStreamReader und eben SequenceInputStream zu benutzen.
 

Neue Beiträge

Zurück