0

对于这个程序,我需要将一本书的数据列表(书名、作者、价格)从文本文件读取到单独的类(书)中的数组列表中。老实说,我只是在 Java 中使用类作为对象只是我无法理解的事情之一,而且我对 ArrayLists 没有太多经验。

public void loadBook(String fn) throws IOException{     
    ArrayList<Book> books = new ArrayList<Book>();
    Scanner infile = new Scanner(new InputStreamReader (new FileInputStream(fn)));
    int num = infile.nextInt();
    infile.nextLine();
    for (int i=0; i<num; i++) {
        String name = infile.nextLine();
        String author = infile.nextLine();
        Double price = infile.nextDouble();
        Book c = new Book (name, author, price);
        books.add(c);
    }
    infile.close();
    }

这是目前在 Book 类中的代码。

public class Book extends Model {

public Book(String name, String author, Double price) {
    String Name = name;
    String Author = author;
    Double Price = price;
}   

文件“fn”包含以下内容:

3
姓名
作者
10.00

但是 loadBook 在读取文件时仍然会引发错误:@

任何帮助将不胜感激,谢谢!

4

2 回答 2

3

使用此输入:

3
name
author
10.00

这段代码

int num = infile.nextInt();
infile.nextLine();
for (int i=0; i<num; i++) {
    String name = infile.nextLine();
    String author = infile.nextLine();
    Double price = infile.nextDouble();
    Book c = new Book (name, author, price);
    books.add(c);
 }

将设置num为 3,因此执行 for 循环 3 次。在每次迭代中,该方法nextLine()被调用两次和nextDouble()一次。但是文件中只有 3 行,所以你调用的nextLine()太频繁了。尝试将您的输入更改为

1      <-- number of listed books, not lines.
name
author
10.00
于 2013-02-13T16:08:41.277 回答
1

尝试确保您的文本文件在 Eclipse 的包中,扩展名为 .txt

//see what your default path is
System.out.println(System.getProperty("user.dir"));

//then use this code as continuation to the default path...for example if your path leads to your working directory
Scanner in = new Scanner(new FileInputStream("src/package_name/filename.txt"));
于 2013-02-13T16:09:35.077 回答