java-forum.org - Java programmieren aus Leidenschaft
Java 6 Einstieg und professioneller Einsatz
Alter Preis: 34,90 EUR
Jetzt: 0,00 EUR

zzgl. Versandkosten

Zurück   java-forum.org - Java programmieren aus Leidenschaft > Java - Programmierung > Java Basics - Anfänger-Themen

Java Basics - Anfänger-Themen Fragen ausschließlich zu Java-Grundlagen von Ein- und Umsteigern

Thema geschlossen    
Themen-Optionen Thema durchsuchen Ansicht
Alt 02.10.2005, 12:07   #1 (permalink)
MJA
Benutzer
short
 
Registriert seit: 29.11.2004
Fachbeiträge: 27
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Standard Binärdateien mit "unbekanntem" Inhalt auslesen

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.
__________________
http://home.arcor.de/jan.hillebrand/data/irOS.gif
irOS - independent robot operating system
MJA ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 02.10.2005, 12:14   #2 (permalink)
Stammbenutzer
Halbes Gigabyte
 
Benutzerbild von Bleiglanz
 
Registriert seit: 06.09.2004
Fachbeiträge: 5.829
Abgegebene Danke: 12
Erhielt 107 Danke für 87 Beiträge
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?
__________________
If you have nothing bad to say, say nothing.
Bleiglanz ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 02.10.2005, 12:36   #3 (permalink)
Stammbenutzer
Viertel Gigabyte
 
Benutzerbild von byte
 
Registriert seit: 17.06.2005
Fachbeiträge: 4.593
Blog-Einträge: 1
Abgegebene Danke: 7
Erhielt 23 Danke für 21 Beiträge
Standard Re: Binärdateien mit "unbekanntem" Inhalt auslesen

Zitat: MJA
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.
byte ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 02.10.2005, 13:43   #4 (permalink)
MJA
Benutzer
short
Themenstarter
 
Registriert seit: 29.11.2004
Fachbeiträge: 27
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
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.
__________________
http://home.arcor.de/jan.hillebrand/data/irOS.gif
irOS - independent robot operating system
MJA ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 02.10.2005, 13:58   #5 (permalink)
Stammbenutzer
Halbes Gigabyte
 
Benutzerbild von Bleiglanz
 
Registriert seit: 06.09.2004
Fachbeiträge: 5.829
Abgegebene Danke: 12
Erhielt 107 Danke für 87 Beiträge
Zitat:
also es kann boolean, byte, char, short, int, float, long, double oder String sein
...
dataOutputStream.writeUTF(data[i]);
das versteh wer will? du schreibst doch nur Strings raus, dann lies sie eben mit readUTF wieder ein...???
__________________
If you have nothing bad to say, say nothing.
Bleiglanz ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 02.10.2005, 14:07   #6 (permalink)
MJA
Benutzer
short
Themenstarter
 
Registriert seit: 29.11.2004
Fachbeiträge: 27
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
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?
__________________
http://home.arcor.de/jan.hillebrand/data/irOS.gif
irOS - independent robot operating system
MJA ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 02.10.2005, 14:33   #7 (permalink)
Stammbenutzer
Halbes Gigabyte
 
Benutzerbild von Bleiglanz
 
Registriert seit: 06.09.2004
Fachbeiträge: 5.829
Abgegebene Danke: 12
Erhielt 107 Danke für 87 Beiträge
eventuell etwas langsamer, aber komfortabler:

Ein String[] ist serialisierbar, schreib und lies es einfach mit einem ObjectOutputstrem
__________________
If you have nothing bad to say, say nothing.
Bleiglanz ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 02.10.2005, 14:43   #8 (permalink)
MJA
Benutzer
short
Themenstarter
 
Registriert seit: 29.11.2004
Fachbeiträge: 27
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Ich hab sowas noch nie gemacht, könntest du mir dafür einen kurzen Code schicken oder einen Link?
__________________
http://home.arcor.de/jan.hillebrand/data/irOS.gif
irOS - independent robot operating system
MJA ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 02.10.2005, 15:34   #9 (permalink)
MJA
Benutzer
short
Themenstarter
 
Registriert seit: 29.11.2004
Fachbeiträge: 27
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
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.
__________________
http://home.arcor.de/jan.hillebrand/data/irOS.gif
irOS - independent robot operating system
MJA ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 02.10.2005, 15:49   #10 (permalink)
MJA
Benutzer
short
Themenstarter
 
Registriert seit: 29.11.2004
Fachbeiträge: 27
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Also, es geht!

Vielen Dank!
__________________
http://home.arcor.de/jan.hillebrand/data/irOS.gif
irOS - independent robot operating system
MJA ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Thema geschlossen    

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
"String" in "int" umwandeln, und dann "int" in "float" Developer_X Allgemeine Java-Themen 8 19.02.2009 15:46
Tabellen Inhalt in einem "anderem Frame" aktuallie tobi88 AWT, Swing, JavaFX & SWT 7 22.09.2008 15:45
JTree - Wie "plus" anzeigen, obwohl kein Inhalt? sina,die AWT, Swing, JavaFX & SWT 1 11.06.2008 15:38
Einer char-Variable "leeren" Inhalt zuweisen Fabian2 Java Basics - Anfänger-Themen 4 29.04.2007 12:09
JTextfield mit unterem "Fenster mit Inhalt" Partheeus AWT, Swing, JavaFX & SWT 2 17.03.2005 15:36


Lesezeichen

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:08 Uhr.


Powered by vBulletin® Version 3.8.6 (Deutsch)
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.2
Thanks for Smilies by smilies.4-user.de