Чтение из текстового файла и сохранение в коллекцию

1

Я думаю, способ сохранить кучу данных, прочитанных из текстового файла, в коллекцию, которая является arraylist. После того, как я прочитал файл, мне нужно подумать, как его сохранить. Например, данные из текстового файла: Решение проблем с помощью C++: Уолтер Савич: 9780132773348: QA760-073: NON FICTION: 2 Вот часть моего кода:

Получить из текстового файла:

public void actionPerformed(ActionEvent arg0) {
            JFileChooser chooser = new JFileChooser();
            FileNameExtensionFilter filter = new FileNameExtensionFilter(
                    "Text and Data Files", "txt", "dat");
            chooser.setFileFilter(filter);
            int returnVal = chooser.showOpenDialog(MainMenu.this);
            if (returnVal == JFileChooser.APPROVE_OPTION) {
                String filename = chooser.getSelectedFile()
                        .getAbsolutePath();
                readBooks(filename);
            }
        }


public void readBooks(String filename) {
    try {
        BufferedReader reader = new BufferedReader(new FileReader(filename));
        int i = 0;
        String line;
        line = reader.readLine();
        while (line != null && !line.equals("")) {
            i++;
            processBook(line);
            line = reader.readLine();
        }
        System.out.println("" + i + " books read");
    } catch (Exception e) {
        System.err.println(e.getMessage());
        e.printStackTrace();
    }
}

public void processBook(String line) {
    int id = nextBookID;
    nextBookID++;

    String[] parts = line.split(":");
    String title = parts[0];
    String author = parts[1];
    String bookISBN = parts[2];
    String callNumber = parts[3];
    String type = parts[4];
    String noOfCopy = parts[5];     

    System.out.println("Creating book " + id);

    // TODO: add create book and add to collection(s)



}
  • 0
    Коллекция чего ?? строки ??
  • 0
    Вероятно, я хотел бы установить список массивов
Теги:
arraylist
text

4 ответа

2

Вы должны начать с создания класса книги:

public class Book() {
    private String title;
    private String author;
    private String bookISBN;
    private String callNumber;
    private String type;
    private String noOfCopy;

    public Book(String title,
        String author,
        String bookISBN,
        String callNumber,
        String type,
        String noOfCopy) {

        this.author = author;
        this.bookISBN = bookISBN;
        this.callNumber = callNumber;
        this.type = type;
        this.noOfCopy = noOfCopy;
    }
}

У вас есть класс для ваших книг, которые вы можете сохранить в списке массивов книг. В вашем методе readBooks вы должны создать этот список массивов:

ArrayList<Book> bookList = new ArrayList<>();

Теперь вы используете этот список внутри метода processBook. Вы создаете свой объект Book с конструктором, который я определил ранее:

Book book = new Book(title, author, bookISBN, callNumber, type, noOfCopy);

Вы можете добавить эту книгу в свой массив:

bookList.add(book);

Это будет хранить ваши книги в коллекции.

  • 0
    Могу ли я объявить массив как глобальную переменную и получить доступ другим способом?
  • 0
    Вы можете объявить его как глобальный проверяемый и получить к нему доступ в других методах. Это еще одна возможность.
Показать ещё 2 комментария
1

Я бы создал класс. Например:

public class Book{
    private int id;
    private String title;
    private String author;
    private String ISBN;
    private String callNumber;
    private String type;
    private String noOfCopy;

    public Book(int id, String title, String author, String ISBN, String callNumber, String type, String noOfCopy) {
        this.id = id;
        this.title = title;
        this.author = author;
        this.ISBN = ISBN;
        this.callNumber = callNumber;
        this.type = type;
        this.noOfCopy = noOfCopy;
    }
    <Getter and Setter>
}

и добавьте новый Bookinstance в Arraylist.

List<Book> books= new ArrayList<Book>();
books.add(new Book(id, parts[0], parts[1], parts[2], parts[3], parts[4], parts[5]))
0

Это можно сделать без кода разбиения на класс, вам просто нужно использовать объект Container (Like Vector of strings), переданный как второй аргумент функции readBooks и другие функции.

Но использование класса - лучший вариант, его более модульный, поддерживаемый и читаемый

0

Я думаю, что лучший подход будет заключаться в создании класса Book, например:

public class Book {

    private String title;
    private String author;
    private String bookISBN;
    private String callNumber;
    private String type;
    private long noOfCopy;

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public String getBookISBN() {
        return bookISBN;
    }

    public void setBookISBN(String bookISBN) {
        this.bookISBN = bookISBN;
    }

    public String getCallNumber() {
        return callNumber;
    }

    public void setCallNumber(String callNumber) {
        this.callNumber = callNumber;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public long getNoOfCopy() {
        return noOfCopy;
    }

    public void setNoOfCopy(long noOfCopy) {
        this.noOfCopy = noOfCopy;
    }
}

Затем просто создайте новые объекты в processBook:

Book tempBook = new Book();
tempBook.setTitle(title);
...

И добавьте их в List, например:

List<Book> myList = new ArrayList<>();
...
myList.add(tempBook);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню