Почему я не могу получить объекты из файла правильно? - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть список пользовательских объектов, которые я пишу и затем читаю в файл.

Вот мой класс:

public class Book implements Serializable{
   private int isbn;
   private String category;
   private String authorName;

    public int getIsbn() {
        return isbn;
    }

    public String getCatId() {
        return category;
    }


    public void setIsbn(int isbn) {
        this.isbn = isbn;
    }

    public void setCategory(String category) {
        this.category = category;
    }


    public void setAuthorName(String authorName) {
        this.authorName = authorName;
    }

    public String getAuthorName() {
        return authorName;
    }

    public Book() {}

    //copy book 
    public Book(Book book, int id) {
        this.category = book.category;
        this.title = book.title;
        this.authorName = book.authorName;
        this.isbn = id;
    } 
}

Вот функция, которую я использую для написания списка объектов:

private static <T> void writeToFile(List<T> items, String fileName) {
    try {
        String path = "src\\hw1\\library\\repos\\" + fileName;

        FileOutputStream f = new FileOutputStream(path, true);// true- means append to file
        ObjectOutputStream o = new ObjectOutputStream(f);

        // Write objects to file
        o.writeObject(items);
        o.close();
        f.close();
    } catch (Exception e) {}
}

А вот функция, которую я вычеркнул из списка:

private static <T> List<T> readFromFile(Context context, String fileName) {
    try {
         String path = "src\\hw1\\library\\repos\\" +fileName ;

         FileInputStream fi = new FileInputStream(path);
         ObjectInputStream oi = new ObjectInputStream(fi);
         // Read objects
         List<T> items = (List<T>)oi.readObject();
         oi.close();
         fi.close();

         return items;
    } catch (Exception e) {}
    return null;
}

Список объектов записывается в файл, но когда я пытаюсь прочитать его с помощью функции над объектами, которые я получаю из файла, только объекты, которые были записаны в файл в первый раз.

Есть идеи, почему я получаю из файла только те объекты, которые были записаны в файл в первый раз?

1 Ответ

0 голосов
/ 08 ноября 2018

Я только предполагаю, что

но когда я пытаюсь прочитать его с функцией над объектами, которые я получаю из файла только объекты, которые были записаны в файл в первый раз.

Одиночная запись помещает данный список в файл, вторая запись помещает другой список в этот файл - потому что вы добавляете файл

Теперь вы читаете метод всегда читает с начала , поэтому каждый вызов readFromFile приведет к чтению одного и того же (самого первого) объекта (списка в вашем случае) из данного файла. Вам нужно будет сделать больше f.readObject() в том же потоке.

Если вы не собираетесь читать все объекты одновременно, я бы предложил использовать по 1 файлу в списке, поэтому вам не придется использовать файл, пытающийся «сместить» позицию указателя файла (и не делать пустых вызовов f.readObject())

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...