![]() |
|
|
|||||||
| Java Basics - Anfänger-Themen Fragen ausschließlich zu Java-Grundlagen von Ein- und Umsteigern |
|
|
|
Themen-Optionen | Thema durchsuchen | Ansicht |
| #1 (permalink) | |
|
Benutzer
short
Registriert seit: 29.11.2004
Fachbeiträge: 27
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
|
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 |
|
|
| #2 (permalink) | |
|
Stammbenutzer
Halbes Gigabyte
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. |
|
|
| #3 (permalink) | ||||||||||||||||
|
Stammbenutzer
Viertel Gigabyte
Registriert seit: 17.06.2005
Fachbeiträge: 4.593
Blog-Einträge: 1
Abgegebene Danke: 7
Erhielt 23 Danke für 21 Beiträge
|
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. |
|||||||||||||||
|
|
||||||||||||||||
| #4 (permalink) | |
|
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;
}
}
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 |
|
|
| #5 (permalink) | ||||||||||||||||
|
Stammbenutzer
Halbes Gigabyte
Registriert seit: 06.09.2004
Fachbeiträge: 5.829
Abgegebene Danke: 12
Erhielt 107 Danke für 87 Beiträge
|
__________________
If you have nothing bad to say, say nothing. |
|||||||||||||||
|
|
||||||||||||||||
| #6 (permalink) | |
|
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 |
|
|
| #7 (permalink) | |
|
Stammbenutzer
Halbes Gigabyte
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. |
|
|
| #8 (permalink) | |
|
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 |
|
|
| #9 (permalink) | |
|
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;
}
}
Danke! Gruß, Jan.
__________________
http://home.arcor.de/jan.hillebrand/data/irOS.gif irOS - independent robot operating system |
|
|
| #10 (permalink) | |
|
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 |
|
|
|
| Themen-Optionen | Thema durchsuchen |
| 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 |
|
|