【发布时间】:2018-08-16 12:10:58
【问题描述】:
所以我不熟悉使用 BufferedReader 从文件中读取,以及在 Java 中使用 arrayLists。我想知道为什么我的代码没有在 arrayList 内的每个 DVD 对象中存储正确的数据。我最初认为它的工作方式是它从文本文件的顶部开始,读取该行,然后将该信息存储在一个变量中。在读取完一个双精度值后,它会根据之前找到的信息创建一个 DVD 对象。然后文件将继续读取并存储arrayList内部的剩余数据。但是,我在 arrayList 的开头收到了这个...
DVD 标题:戏剧,DVD 类别:130 分钟,DVD 播放时间:2002,DVD 年份:50,DVD 价格:52.0
这里有很多问题。首先,标题应该是“Mystic River”,但它跳过了该行并存储了“戏剧”类别。此外,对于文件读取过程的其余部分,年份和价格信息明显错误。在第一个条目之后,标题、类别和运行时间数据被适当地存储,如下所示。
DVD 标题:珠穆朗玛峰,DVD 类别:纪录片,DVD 时长:78 分钟,DVD 年份:50,DVD 价格:48.0
是什么导致数据存储不正确?
ArrayList<DVD> DVDArrayList = new ArrayList<DVD>();
try
{
BufferedReader kbd = new BufferedReader(new FileReader("DVDCollection.txt")); // Open the DVDCollection file.
String line;
while ((line = kbd.readLine()) != null) // Read the contents.
{
String dvdTitle = kbd.readLine();
String dvdCategory = kbd.readLine();
String dvdRunningTime = kbd.readLine();
int dvdYear = kbd.read();
double dvdPrice = (double) kbd.read();
DVDArrayList.add(new DVD (dvdTitle, dvdCategory, dvdRunningTime, dvdYear, dvdPrice));
}
kbd.close(); // Close file after reading
}
catch (Exception e)
{
System.out.println("Error reading file.");
}
这是数据文件
Mystic River
Drama
130 minutes
2002
24.99
Everest
Documentary
78 minutes
2012
7.99
Life is Beautiful
Drama
125 minutes
1999
15.99
Village in China
Documentary
60 minutes
2006
11.99
Marley and Me
Comic
150 minutes
2008
17.99
Halloween Night
Mystery
80 minutes
2010
9.99
【问题讨论】:
-
您为什么使用
kbd.read()读取年份和价格?它只读取一个字符。改用deadline并解析它。
标签: java file object arraylist bufferedreader