Witam!
Mam problem z czytaniem zapisywanych danych z pliku. Chodzi o 2 metody: DataOutputStream oraz ObjectOutputStream.
- metoda DataOutputStream
Tak zapisuję:
case 11:
DataOutputStream out = null;
try {
out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(
"listaDataOutput.bin")));
for (k=0 ; k < ile_jest ; k++)
{
if(s[k] != null)
{
out.writeUTF(s[k].imie);
out.writeUTF(s[k].nazwisko);
out.writeFloat(s[k].nrIndeksu);
}
}
} finally { out.close(); }
break;
A tak odczytuję, napotykając błędy:
case 12:
DataInputStream wejscie = null;
try {
wejscie = new DataInputStream(new BufferedInputStream(new FileInputStream(
"listaDataOutput.bin")));
try {
s[ile_jest].imie = wejscie.readUTF();
s[ile_jest].nazwisko = wejscie.readUTF();
s[ile_jest].nrIndeksu = (int) wejscie.readFloat();
ile_jest++;
} catch (EOFException e) { }
} finally { wejscie.close(); }
for (k=0 ; k < ile_jest ; k++)
{
if(s[k] != null)
{ s[k].wyswietl(); }
else {System.out.println("brak studentow w bazie");}
}
break;
Błędy:
Exception in thread "main" java.lang.NullPointerException
at kamil_s.student.main(student.java:469)
Java Result: 1
BUILD SUCCESSFUL (total time: 3 seconds)
- metoda ObjectOutputStream
case 13:
String nazwaPliku = "listaObject.bin";
ObjectOutputStream wyjscie = new ObjectOutputStream(
new BufferedOutputStream(
new FileOutputStream(nazwaPliku)));
for (k=0 ; k < ile_jest ; k++)
{
if(s[k] != null)
{ wyjscie.writeObject(s[k]); }
else { System.out.println("brak studentow w bazie"); }
}
wyjscie.close();
break;
Odczyt:
case 14:
ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream("listaObject.bin"));
while((s[ile_jest]= (student) inputStream.readObject()) != null);
{
ile_jest++;
}
inputStream.close();
break;
Błędy:
14
Exception in thread "main" java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2571)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1315)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)
at kamil_s.student.main(student.java:513)
Java Result: 1
BUILD SUCCESSFUL (total time: 2 seconds)
O ile w 1 metodzie muszę wiedzieć co zapisuję, żeby poprawnie odczytać, o tyle w drugie wydaje mi się, że skoro zapisuję bezpośrednio cały obiekt to również cały odczytuję. Jednak życie to nie bajka... :D Proszę o pomoc.
Dodam tylko, że pliki w które wrzucam dane nie są puste. Tzn. coś się jednak zapisuje.