cybton.com
Über uns | Jobs | Werbung | Sitemap | AGB | Impressum | Hilfe ?
 Kostenlos anmelden)
Forum
Aktuellste Beiträge
Forenregeln

Community
BB-Codes
Tags
Chat
Suche (Web)
Wer ist online?
Top-User

Basar


Statistik
Mitglieder gesamt: 68142
Mitglieder online: 1
Gäste online: 1
mehr...

Anzeige
Forum » Forum: Softwareprogrammierung » Thread: [gelöst] [Java] Kann mir einer sagen, wie ich die EOFException weg bekomme?

Thread: [gelöst] [Java] Kann mir einer sagen, wie ich die EOFException weg bekomme?

Seite 1 von 212

06.06.2008 09:16 Uhr

 

Status: offline
Dies ist der Code, mit dem ich die Daten in die Datei einlese:
+ java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
try {
                                    File datei = new File("fahrzeug.dat");                              
                                    
                                    RandomAccessFile ausgabe = new RandomAccessFile(datei, "rw");
                                    System.out.println("Dateilänge" + ausgabe.length());
                                    ausgabe.seek(ausgabe.length());
                                    ausgabe.writeUTF(fullid);
                                    ausgabe.writeUTF(marke);
                                    ausgabe.writeUTF(typ);
                                    ausgabe.writeUTF(berechtigung);
                                    ausgabe.writeUTF(erstzulassung);
                                    ausgabe.writeUTF(kaufpreis);
                                    ausgabe.writeUTF(ladevolumen);
                                    ausgabe.writeUTF(sitzplaetze);
                                    ausgabe.writeUTF(leistung);
                                    ausgabe.writeUTF(kilometerstand);
                                    ausgabe.writeUTF(kraftstoff);
                                    ausgabe.writeUTF(inspektion);
                                    ausgabe.writeUTF(hu);
                                    ausgabe.writeUTF(au);
                                    ausgabe.writeUTF(versicherung);
                                    ausgabe.writeUTF(kategorie);
                                    ausgabe.writeUTF(parkplatz);
                                    ausgabe.writeUTF(stellplatz);
                                    ausgabe.writeUTF(schaden);
                                    
                                    System.out.println("Dateilänge" + ausgabe.length());
                                    ausgabe.close();
                              }
                              catch (IOException ex2) {
                                    System.out.println("Fehler: "+e.toString());
                              }
Unt dies ist der Code, mit dem ich Teile der Datei wieder auslesen möchte.
+ java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
String lastid = null;
            try {
                  
                  RandomAccessFile ausgabe = new RandomAccessFile("fahrzeug.dat", "rw");
                  if (ausgabe.length() <= 400) {
                        String s = ausgabe.readUTF();
                        lastid = s;
                        System.out.println(s);
                  }
                  else {
                        ausgabe.seek(ausgabe.length() - 400);
                        String s = ausgabe.readUTF();
                        lastid = s;
                        System.out.println(s);
                  }
                  ausgabe.close();
            }
            catch (IOException ex) {
                  System.out.println("Fehler: "+ex.toString());
            }
Mein Problem ist nun, dass die Ausgabe erst das richtige Ergebnis geliefert hat ("ID: 200806061") und jetzt auf einmal eine EOFException wirft.
Hat jemand eine Ahnung warum das so ist und wie ich das Problem lösen kann.
2 mal bearbeitet
___________________________
Live your life everyday.
http://www.linksworld24.de.vu Besucht meine HP und macht mit.
06.06.2008 11:57 Uhr

 

Status: offline
Ist 400 die Laenge eines Datensatzes?
Warum liest du einen ganzen Datensatz, wenn die Laenge <= 400 ist?

In welcher Zeile tritt der Fehler ueberhaupt auf?
___________________________
"All input is evil, until proven otherwise" Michael Howard
06.06.2008 12:27 Uhr

 

Status: offline
Welche UTF-Codierung verwendest du? Wenn ich diesem Link trauen darf, liest readUTF bis zu drei Byte aus. Hier wird es dein Programm schmeißen, da es wahrscheinlich eine Codierung einliest, die nicht in deinem File enthalten ist, und so ans Ende des Files kommt. Aus Empörung, dass da kein Zeichen aufs Einlesen wartet, wirft er die Exception.
1 mal bearbeitet
___________________________
"Etre fort pour être utile" - Georges Hébert
06.06.2008 13:01 Uhr

 

Status: offline
Poste mal bitte hier den Stacktrace.
JAVA:
1
2
3
4
try {
} catch(Exception e) {
   e.printStackTrace();
}
Dann weiß man auch gleich mal, was genau die Exception auslöst.
___________________________
Visit: www.sim4000.de
Ein ball rollt um die Ecke und fällt um.
Intelligenz ist, wenn mein weiß, dass man doof ist.
06.06.2008 14:04 Uhr

 

Status: offline
Hier erstmal der Stacktrace:
java.io.EOFException
    at java.io.RandomAccessFile.readFully(Unknown Source)
    at java.io.DataInputStream.readUTF(Unknown Source)
    at java.io.RandomAccessFile.readUTF(Unknown Source)
    at Fuhrpark.main(Fuhrpark.java:399)

Das der Fehler beim readUTF liegt wusste ich schon.
Allerdings verstehe ich nicht, warum er sagt, dass er das ausgelesene nicht kennt.
Es ist doch bereits als UTF in die Datei geschrieben worden.
Ausserdem hat ja der gleiche Code vorher noch funktioniert.

Die Länge ist etwa 400 aber er hat mir ja nur das ausgelesen, was ich haben will, nämlich die ID.
___________________________
Live your life everyday.
http://www.linksworld24.de.vu Besucht meine HP und macht mit.
06.06.2008 21:53 Uhr

 

Status: offline
readFully befüllt anscheinend den Buffer mit den einzelnen Bytes in deinem Dat-File. Ich glaube, dass es mehr zu lesen versucht als an Datenbytes vorhanden ist und deswegen die Exception wirft.

Wie gesagt, bist du dir sicher, dass das Encoding des Files stimmt?
___________________________
"Etre fort pour être utile" - Georges Hébert
07.06.2008 01:03 Uhr

 

Status: offline
Zitat:
Die Länge ist etwa 400

"Etwa" ist etwas ungenau, um in einer Datei zu seeken  :wink: 

Der "else" Zweig scheint den Lesezeiger im File bei 400 vor Ende zu positionieren. Das muss nicht unbedingt der Anfang einer zu lesenden ID sein (deiner Beschreibung nach).

Ausserdem stimmen die Zeilennummern deines Stacktraces nicht mit dem geposteten Code überein, so bringt das nicht wirklich viel ...
08.06.2008 15:11 Uhr

 

Status: offline
Die angegebene Zeile ist diese:
String s = ausgabe.readUTF();

Das Problem bei der Länge ist, dass sie etwa zwischen 375 und 425 schwankt.

Habe mitlerweilen auch schon versucht mit Vektoren zu arbeiten, allerdings bin ich da auch nicht sehr weit gekommen.

Vielleicht mal das Ganze andersherum versuchen. Weiß jemand, wie ich meine Datensätze problemlos ein- und auslesen kann, um sie später auch ändern zu können.
___________________________
Live your life everyday.
http://www.linksworld24.de.vu Besucht meine HP und macht mit.
08.06.2008 20:41 Uhr

 

Status: offline
Das ist schon klar, dass die Exception bei irgendeiner Leseoperation geworfen wird. Ich habe den Eindruck, du hast generell Probleme, richtig Datensätze zu schreiben. So wie es aussieht, schreibst du deine Entities einfach hintereinander und zwar durch Linebreaks (zufällig oder von dir so gewollt?) getrennt. Du kannst aber den Lesezeiger nicht irgendwo positionieren, wenn du anschliessend UTF kodierte Zeichen lesen willst. Du musst schon genau wissen, dass an dieser Stelle eine Entity beginnt, da ein Zeichen UTF-8 kodiert, keine feste Bytelänge besitzt. D.h. wenn du genau in der Mitte eine kodierten Zeichens zu lesen beginnst, kann's nicht klappen.

Lies dir vielleicht das mal durch (hab's nur überflogen, aber sollte helfen)
RandomIO.pdf
09.06.2008 09:43 Uhr

 

Status: offline
Wieso machst du das ganze nicht einfach mit XML? Dann könntest du das Attribut bzw. den Knoten anhand seines Namens ansprechen und diese Probleme wären gelöst. Aber es würde dir ja schon helfen, die die mit einem eigenen Format zu versehen, dass es dir erlaubt sie leichter zu parsen.

In etwa so:

[Abteil1]
ID:23939585
Name:Value
Name2:Value2
[Abteil2]
...

Oder, du erstellst dir eine Klasse und serialisierst sie in ein File. Das macht das ganze noch einfacher zum auslesen, da du dann eine Kette von schon befüllten Objekten erhältst beim auslesen.
___________________________
"Etre fort pour être utile" - Georges Hébert
Seite 1 von 212
Ähnliche Threads Forum Ähnlichkeitsgrad
 MyAlikes wird bestimmt so der Hammer! Das Promotion-Board 1
 Java Applets reagieren komisch Software & Betriebssysteme 1
 JAVA: Bilder verkleinern Softwareprogrammierung 1
 [gelöst][Java] readUTF(String) in Integer umwandeln Softwareprogrammierung 1
 Rechen JavaScript Probleme Softwareprogrammierung 1
 [Java] ArrayList macht nicht, was sie soll Softwareprogrammierung 1
 [Java] Variablen während der Laufzeit dynamisch benennen Softwareprogrammierung 1
nach obennach oben

Copyright © 2008 cybton-network

Google
Partner: #Musik - Dein Internetradio - nexem. - .wir machen news - Your-Book.net - Dein kostenloses Gästebuch
ANEXIA - PHP Entwicklung - Dockers - s.Oliver Schuhe - Think Schuhe - der eigene Weg - Dorfen - Paul Green Schuhe - Bequeme Geox - Web-Entwicklung