Witam
W ramach treningu i nauki javy pisałem programik który zapisuje obiekty klasy Book do pliku Object.obj. Zapisywanie poszło bez problemu, przy wczytywaniu pojawił się problem. Chciałem wczytać obiekty z pliku do tablicy klasy Book i tutaj program wczytuje mi tylko pierwszy obiekt kilka razy(w tym przypadku 3, petal for w metodzie PrintBook ograniczona do 3).
Tutaj pojawia się moje pytanie, co mam zrobić aby wczytać kolejny obiekt z pliku i jakim argumentem zamykać pętle, aby kończyła działanie gdy wczyta wszystkie obiekty z pliku, a nie jak to ma w obecnym przykładzie pętla kończy działanie gdy i>= 3.
public class Library {
private static final int MAX_BOOKS= 100;
private int booksNumber= 1;
private Book[] books;
private FileManager fm;
public Library(){
books= new Book[MAX_BOOKS];
fm= new FileManager();
}
public void addBook(Book book){
if(booksNumber<MAX_BOOKS){
for(int i=0; i<books.length; i++){
books[i]= book;
booksNumber++;
fm.writeObjectToFile(book);
}
}else{
System.out.println("Lack of space");
}
}
public void printBook() {
for(int i=0; i<3; i++){
books[i]= fm.readObjectFromFile();
System.out.println(i+" "+books[i]);
}
}
}
public class FileManager {
private static final String FILE_NAME= "Object.obj";
private File file= new File(FILE_NAME);
public void writeObjectToFile(Book book){
boolean exist= file.exists();
if(exist== true){
try (FileOutputStream fos= new FileOutputStream(FILE_NAME, true);
ObjectOutputStream oos= new ObjectOutputStream(fos);) {
oos.writeObject(book);
oos.writeBytes("\n");
System.out.println("Object wrote");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}else{
try {
file.createNewFile();
System.out.println("File Created");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public Book readObjectFromFile(){
Book book= null;
try(FileInputStream fis= new FileInputStream(FILE_NAME);
ObjectInputStream ois= new ObjectInputStream(fis);) {
book= (Book) ois.readObject();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return book;
}
}