FileInputStream manipulieren

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Guten Abend,

ich stehe vor einem Problem, bei dem ich keinen Lösungsansatz habe.
Ich lese eine Datei mittels des FileInputStreams aus.

Eine Methode liefert mir dabei einen String zurück, den ich manipuliere.

Nun das Problem: Wie bekomme ich den FileInputStream dazu, den manipulierten String wieder einzulesen? (Der Stream wird im Anschluss noch weiterverwendet.) Ich brauche die Manipulation deswegen, weil ich flexibler auf einige Dateninhalte reagieren möchte.
Eine zweite(temporäre) Datei anzulegen, zu schreiben, wieder einzulesen und im Anschluss zu löschen erscheint mir wenig sinnvoll.

Gibt es diesbezüglich eine elegante Lösung?
 
du kannst einen eigenen FileInputStream anbieten, der im Voraus aus dem anderen Stream liest und erst die bearbeiten bytes oder Strings weitergibt
 
Wie kann man denn mit einem InputStream aus einem InputStream lesen? Muss man da nicht den Dateinamen angeben?
 
aus einem Inputstream liest man von überall gleich, von einem JFrame aus wie von der main-Methode wie von einem anderen InputStream aus:
stream.readIrgendwas()

du liest vielleicht schon Strings draus und nicht nur Bytes,
ist nicht ganz einfach da wieder Bytes daraus zu machen oder was immer der nächste Empfänger braucht,
aber so allgemein ohne Details läßt sich nicht mehr dazu sagen,

die Daten einlesen aber zwischenspeichern, wenn dann jemand anders wieder read() am eigenen Stream aufruft, dann die gespeicherten und vielleicht veränderten Informationen weitergeben
 
Vielleicht kann man mit gepip(e)ten (argh, denglish) Streams arbeiten. Da entfällt ein gesondertes Zwischenspeichern und man reicht den Kram mit den gewünschten Modifikationen einfach durch.

Hab mal was Kleines gebastelt:
Code:
import java.io.*;

public class Testclass {

	public static void main(String[] args) throws Exception {
		
		FileInputStream fis = new FileInputStream(new File("Testclass.java"));
		
		PipedInputStream pis = new PipedInputStream();
		PipedOutputStream pos = new PipedOutputStream(pis);
		int i = -1;
		while((i = fis.read()) != -1) {
			pos.write(i);
			pos.write(' ');
		}
		fis.close();
		pos.close();
		
		while((i = pis.read()) != -1) {
			System.out.print((char)i);
		}
		
		pis.close();
	
	}
	
}
Da wird halt hinter jedes Zeichen noch ein Leerzeichen gesetzt. Hoffe, das geht wenigstens ein bisschen in die gewünschte Richtung. Ich bin mir allerdings nicht sicher, ob das frühe Schließen des OutputStreams nur funktioniert, weil meine Beispieldatei so klein ist... eigentlich müsste die Pipe dadurch kaputt gehen... Aber ohne das hängts (schließt ja niemand den OutputStream) und das ist ja auch nur ein PoC.

pis out!
 
Es geht vielmehr um folgendes Problem: Ich lese eine Text-Datei ein mittels FileInputStream, manipuliere den String und möchte mir daraus wieder einen FileInputStream erzeugen. Blos wie kann ich das machen? Wie kann ich sicher gehen, dass die "alten" Daten in dem Stream nicht mehr vorhanden sind.
 
Warum muss es denn unbedingt ein FileInputStream sein? Dazu hat man doch das Interface InputStream, da kann man alles gleich behandeln.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben