Binärdateien mit "unbekanntem" Inhalt auslesen

Status
Nicht offen für weitere Antworten.

MJA

Mitglied
Hallo.

Ich möchte Binärdateien auslesen und den Inhalt als String Array zurückgeben lassen.
Zum Auslesen der Dateien verwende ich einen FileInputStream, der von einem DataInputStream ummantelt ist. Die Klasse DataInputStream bietet ja nun für alle primitiven Datentypen und für String Methoden zum Auslesen. Dies setzt aber vorraus, dass der Datentyp, des Inhaltes der aktuell gelesenen Zeile bekannt ist. In meine Fall weiß ich aber nicht, um welchen Datentypen es sich handelt (also es kann boolean, byte, char, short, int, float, long, double oder String sein). Wie kann ich die Daten also auslesen und sie hinterher in einen String konvertieren um sie dem Array hinzuzufügen? Wie kann ich vor dem Auslesen herrausfinden, wie groß der Ziel-Array sein muss?

Gruß,
Jan.
 

Bleiglanz

Gesperrter Benutzer
das ist unmöglich

wie billst du etwa die Folge

byte-byte-byte-byte

von

int

unterscheiden? Wenn du nicht weisst was drin ist, dann geht das nicht (ein DataOubputStream speichert keine "MetaInformationen")

abgesehen davon, funktionert das Lesen eines Strings NUR dann, wenn da wirklich ein String reingeschrieben wurde?

was genau willstn machen?
 

byte

Top Contributor
MJA hat gesagt.:
Dies setzt aber vorraus, dass der Datentyp, des Inhaltes der aktuell gelesenen Zeile bekannt ist. In meine Fall weiß ich aber nicht, um welchen Datentypen es sich handelt (also es kann boolean, byte, char, short, int, float, long, double oder String sein).

es stehen ja keine "datentypen" in ner datei. die daten sind entweder binär oder als klartext in einem entsprechenden zeichensatz gespeichert. du kannst sie also entweder als bytes einlesen (erster fall) oder als strings (zweiter fall). ob der string nun wirklich ein string ist oder eine konkatenation aus string / int / float / etc, das prüfst du erst dann, wenn du die daten schon eingelesen hast, indem du sie geeignet interpretierst.

also du musst schon wissen ob sie binär oder als "klartext" vorliegen. dann kannst du mit geeigneten methoden einlesen. oder willst vorher durch java serialisierte daten (serializable) wieder einlesen? dann guck dir den ObjectInputStream an.
 

MJA

Mitglied
Also, alle diese Dateien werden mit dieser Methode geschrieben:

Code:
public static boolean writeFile(String fileName, String data[], boolean overwrite)
	{
		if(!isValidFileName(fileName))
			throw new IllegalArgumentException("fileName cannot be " + fileName);
		
		File file = new File(dataDirectoryPath +
				System.getProperty("file.separator") +
				fileName);
		
		try
		{
			if(!file.exists())
				file.createNewFile();
			else
				if(overwrite)
				{
					FileOutputStream fileOutputStream = new FileOutputStream(file);
					DataOutputStream dataOutputStream = new DataOutputStream(fileOutputStream);

					for(int i = 0; i < data.length; i++)
						dataOutputStream.writeUTF(data[i]);

					dataOutputStream.close();
					
					return true;
				}
			
			return false;
		}
		catch(Exception e)
		{
			return false;
		}
	}

Ich benutze diese Methode sowohl, um binäre Daten, wie z.B. Bilder zu speichern, wie auch für Einstellungen oder normale Textdaten. Ich weiß, dass man letzteres eigentlich viel einfacher als ASCII speichern könnte, aber ich bevorzuge binär, unter anderem auch, weil ich den Zugriff mit normalen Texteditoren nicht so leicht freigeben will.
Wenn ich die Binärdatei wieder auslese möchte ich genau den String Array zurückgeben, den ich geschrieben habe.
 

Bleiglanz

Gesperrter Benutzer
also es kann boolean, byte, char, short, int, float, long, double oder String sein
...
dataOutputStream.writeUTF(data);

das versteh wer will? du schreibst doch nur Strings raus, dann lies sie eben mit readUTF wieder ein...???
 

MJA

Mitglied
Ja, tut mir leid, als ich den Thread gepostet habe, hatte ich für jeden angeführten Datentypen eine überladene Methode. Ich habe mich jetzt dagegen entschieden.
Was ich mich aber noch frage ist, wenn ich Daten mit writeUTF() schreibe, wird doch kein Zeilenumbruch angehängt, oder? Weiß readUTF() denn trotzdem, wo das Ende eines Strings ist?

Mein Hauptproblem jetzt besteht darin, wie ich herausfinden kann wie viele Strings in der Datei vorhanden sind. Ich will ja einen Array zurückgeben. Der soll natürlich nicht am Ende noch etliche leere Elemente beinhalten und eine ArrayIndexOutOfBoundsException wäre auch dumm. Muss ich mit einer for-Schleife erst einmal alles bis zum Ende durchgehen und dabei zählen oder geht das auch einfacher?
 

Bleiglanz

Gesperrter Benutzer
eventuell etwas langsamer, aber komfortabler:

Ein String[] ist serialisierbar, schreib und lies es einfach mit einem ObjectOutputstrem :)
 

MJA

Mitglied
Ich hab sowas noch nie gemacht, könntest du mir dafür einen kurzen Code schicken oder einen Link?
 

MJA

Mitglied
So, ich habe es jetzt auch mal selber probiert. Hier sind die beiden fertigen Methoden:

Code:
public static boolean writeFile(String fileName, String data[], boolean overwrite)
	{
		if(!isValidFileName(fileName))
			throw new IllegalArgumentException("fileName cannot be " + fileName);
		
		File file = new File(dataDirectoryPath +
				System.getProperty("file.separator") +
				fileName);
		
		try
		{
			if(!file.exists())
			{
				file.createNewFile();
				overwrite = true;
			}
			
			if(overwrite)
			{
				FileOutputStream fileOutputStream = new FileOutputStream(fileName);
				ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
				
				objectOutputStream.writeObject(data);
				objectOutputStream.close();
				
				return true;
			}
			
			return false;
		}
		catch(Exception e)
		{
			return false;
		}
	}

Code:
public static String[] readFile(String fileName)
	{
		try
		{
			FileInputStream fileInputStream = new FileInputStream(fileName);
			ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
			
			String data[] = (String[]) objectInputStream.readObject();
			
			objectInputStream.close();
			
			return data;
		}
		catch(Exception e)
		{
			return null;
		}
	}

Ich hoffe das funktioniert.

Danke!

Gruß,
Jan.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Binärdateien - Offset Java Basics - Anfänger-Themen 4
M Einlesen von Binärdateien (binary interleaved by line) Java Basics - Anfänger-Themen 3
K Einlesen von Binärdateien Java Basics - Anfänger-Themen 3
M Binärdateien auslesen (unsigned!) Java Basics - Anfänger-Themen 5
richis-fragen JTable effektiv angezeigter Text ausgeben nicht Inhalt vom Model Java Basics - Anfänger-Themen 9
N Ich kriege ganze zeit die Fehlermeldung "Inhalt der Zwischenablage kann nicht in die ausgewählten Elemente eingefügt werden" hat jemand eine Lösung? Java Basics - Anfänger-Themen 6
M Verständnisfrage: Warum wird die Datei ohne Inhalt übertragen Java Basics - Anfänger-Themen 3
D Inhalt eines Arrays ausgeben Java Basics - Anfänger-Themen 7
javapingu Jeglichen Inhalt einer Textdatei nach Zeile n löschen Java Basics - Anfänger-Themen 8
K Ein Objekt Auto kennt den Inhalt seines links und rechtsstehenden Autos, wie soll man das ermöglichen Java Basics - Anfänger-Themen 2
Ameise04 Variablen Inhalt einer Variable im Code verwenden? Java Basics - Anfänger-Themen 9
I String ersetzen, der Inhalt enthält Java Basics - Anfänger-Themen 4
T Inhalt aus TextField in Attribut einer Instanz schreiben Java Basics - Anfänger-Themen 5
J Problem mit einer Methode die gewissen Inhalt einer Array löschen soll Java Basics - Anfänger-Themen 9
F Erstellen zweier Objekte mit dem selben Inhalt Java Basics - Anfänger-Themen 1
N den inhalt eines array per funktion ausgeben Java Basics - Anfänger-Themen 8
X TextField-Inhalt mit Button in .txt-Datei speichern Java Basics - Anfänger-Themen 16
J Datentypen CSV to DB Leere Zellen in CSV mit Inhalt? Java Basics - Anfänger-Themen 11
H Universitätsaufgabe String inhalt Kontrollieren Java Basics - Anfänger-Themen 9
karlmasutra OOP Inhalt eines Array ausgeben lassen Java Basics - Anfänger-Themen 8
C Vector-Inhalt in zufällige Reihenfolge bringen Java Basics - Anfänger-Themen 6
D Ich suche nach einer Möglickeit den Webseiten Inhalt per Java zu analysieren Automatisch Java Basics - Anfänger-Themen 3
L Namensliste mit Array zeigt nicht den gewünschten Inhalt Java Basics - Anfänger-Themen 12
F Variablen JTextField-Inhalt kann nicht mit String abgeglichen werden Java Basics - Anfänger-Themen 2
Zeekay Development Methoden Methoden Inhalt Abhängig vom Objekt? Java Basics - Anfänger-Themen 9
B BufferedReader gibt Datei-Inhalt doppelt aus Java Basics - Anfänger-Themen 3
M Ordner mit Inhalt löschen Java Basics - Anfänger-Themen 7
R getrennte Objekte aus Klasse erstellen : warum Inhalt dann gleich ? Java Basics - Anfänger-Themen 2
Silvascus Inhalt eines externen Textdokuments an einen String übergeben Java Basics - Anfänger-Themen 2
F Inhalt einer Variable auswerten, die sich immer wieder ändert Java Basics - Anfänger-Themen 1
K Variablenname soll der Inhalt vom String sein Java Basics - Anfänger-Themen 2
O Zip-File Inhalt einlesen Java Basics - Anfänger-Themen 3
S Inhalt aus anderen Klassen verwenden Java Basics - Anfänger-Themen 1
H Input/Output Inhalt einer GUI in Textdatei speichern Java Basics - Anfänger-Themen 1
M Wie gebe ich den Inhalt aus? Java Basics - Anfänger-Themen 17
K Inhalt von einer csv-Datei abspeichern Java Basics - Anfänger-Themen 3
P Seite auf Inhalt prüfen Java Basics - Anfänger-Themen 2
U Inhalt von JTextfield an andere Klasse weitergeben Java Basics - Anfänger-Themen 13
Uzi21 jTable / Inhalt speichern Java Basics - Anfänger-Themen 2
T CSV auf Inhalt und Zeilen überprüfen Java Basics - Anfänger-Themen 2
S Inhalt von JPanel erst nach Resize sichtbar Java Basics - Anfänger-Themen 2
T Aufgerufene Methode Inhalt der übergebenen Referenz Java Basics - Anfänger-Themen 5
1 den Inhalt eines Arrays umdrehen Java Basics - Anfänger-Themen 11
A Leere Datei wird ohne Inhalt geschrieben, obwohl Inhalt geschrieben wurde. Java Basics - Anfänger-Themen 4
K Inhalt in den Zwischenspeicher legen Java Basics - Anfänger-Themen 2
kaoZ Input/Output Verzeichnis Inhalt in combobox ausgeben Java Basics - Anfänger-Themen 8
G JTable: Inhalt einer selektierten Zeile speichern Java Basics - Anfänger-Themen 2
G Inhalt einer JTextArea wird nicht dargestellt Java Basics - Anfänger-Themen 8
J Inhalt in einem Text-File finden und in ein Array schreiben Java Basics - Anfänger-Themen 5
R Inhalt vom String größer oder kleiner als Java Basics - Anfänger-Themen 16
F Erste Schritte if Inhalt Java Basics - Anfänger-Themen 7
C Erste Schritte String-INhalt in TXT ausgeben Java Basics - Anfänger-Themen 7
L Split + Zeilen einer Datei mit bestimmtem Inhalt löschen Java Basics - Anfänger-Themen 23
U OOP Array vom Typ String > Inhalt ausgeben Java Basics - Anfänger-Themen 8
M Array Inhalt kopieren Java Basics - Anfänger-Themen 3
O Container Inhalt auslesen Java Basics - Anfänger-Themen 2
M Inhalt/Wert aus einer JList ablesen Java Basics - Anfänger-Themen 5
M String auf Inhalt überprüfen Java Basics - Anfänger-Themen 11
H Mehrdimensionales Array - Inhalt auf Null überprüfen Java Basics - Anfänger-Themen 5
B Datentypen Inhalt von Objekten miteinander vergleichen Java Basics - Anfänger-Themen 2
I Mehrere ArrayLists mit einer for( : ) Schleife auf Inhalt prüfen Java Basics - Anfänger-Themen 6
R Erste Schritte Objekte mit anderen Objekten als Inhalt Java Basics - Anfänger-Themen 4
F Kopieren von Ordner sammt inhalt Java Basics - Anfänger-Themen 5
I Datei einlesen, Inhalt in MAP ablegen Java Basics - Anfänger-Themen 10
E Inhalt von Option Feldern auslesen? Java Basics - Anfänger-Themen 2
Helgon Inhalt - Aktualisierungs Problem Java Basics - Anfänger-Themen 7
T Inhalt Gridlayout wird nicht angezeigt Java Basics - Anfänger-Themen 6
O Variablen Variablen Inhalt von Webseite einlesen!? Java Basics - Anfänger-Themen 2
M Inhalt eines Strings um eins hochzählen Java Basics - Anfänger-Themen 19
M String Inhalt wird überschrieben (Subklassen verwenden denselben String) Java Basics - Anfänger-Themen 13
Gossi Input/Output Datei Lesen, inhalt abfragen, speichern Java Basics - Anfänger-Themen 5
B jar Inhalt anzeigen Java Basics - Anfänger-Themen 5
H Input/Output Inhalt einer TextArea in Hex umwandeln Java Basics - Anfänger-Themen 10
D Textfile lesen/schreiben abhängig vom inhalt Java Basics - Anfänger-Themen 6
J Inhalt eines Arrays vergleichen? Java Basics - Anfänger-Themen 8
X Collections Inhalt von zwei Collections prüfen Java Basics - Anfänger-Themen 4
D jTable befüllen mit dynamischem Inhalt Java Basics - Anfänger-Themen 11
M Inhalt Textfeld prüfen Java Basics - Anfänger-Themen 4
H Java-Fenster ohne Inhalt Java Basics - Anfänger-Themen 2
D Inhalt der Spalten einer Tabelle addieren Java Basics - Anfänger-Themen 4
B Datentypen Inhalt zum Iterator wieder aufrufen? Java Basics - Anfänger-Themen 10
E Inhalt zwischen zwei String auslesen? Java Basics - Anfänger-Themen 8
S Inhalt eines Vektors ausgeben Java Basics - Anfänger-Themen 2
F String-Inhalt als Datatype-Name Java Basics - Anfänger-Themen 5
D Inhalt einer Liste auf nur ein Wert überprüfen ohne die Liste komplett zu interieren Java Basics - Anfänger-Themen 6
M Tabelle mit immer sortiertem Inhalt Java Basics - Anfänger-Themen 5
S JFileChooser - Dateinamen vorschlagen/Inhalt der Ausgabe prüfen Java Basics - Anfänger-Themen 3
J JList Inhalt nach JButton Klick aktualisieren Java Basics - Anfänger-Themen 8
C Inhalt eines Strings in JLabel ausgeben? Java Basics - Anfänger-Themen 21
L Inhalt von JEditorPane löschen Java Basics - Anfänger-Themen 4
G Inhalt Jar-Files anzeigen, incl. Methoden Java Basics - Anfänger-Themen 2
D HashMap mit Inhalt kopieren Java Basics - Anfänger-Themen 8
M [J3D] Applet-Inhalt Speichern (Manipulationen etc. ...) Java Basics - Anfänger-Themen 2
X JTable --> Spaltenbreiter am dargestellten Inhalt anpassen Java Basics - Anfänger-Themen 4
C JPanel Inhalt anpassen Java Basics - Anfänger-Themen 4
P Objekte im Array speichern und auf den Inhalt zugreifen ? Java Basics - Anfänger-Themen 4
S Inhalt von GUI-Eingabe drucken Java Basics - Anfänger-Themen 7
Sweety JTable Inhalt löschen Java Basics - Anfänger-Themen 10
O OOP FileOutputStream überschreibt ganzen inhalt der txt Java Basics - Anfänger-Themen 4
K Inhalt eines Elements aus dem Objekt Array auslesen Java Basics - Anfänger-Themen 9

Ähnliche Java Themen


Oben