所以我是新手使用BufferedReader从文件中读取,以及在Java中使用arrayLists。我想知道为什么我的代码不会在arrayList中的每个DVD对象中存储正确的数据。我最初认为这种方法的工作原理是它从文本文件的顶部开始,读取该行,然后将该信息存储在变量中。在完成读取双精度值后,它会根据之前找到的信息创建一个DVD对象。然后文件将继续读取并存储arrayList中的剩余数据。但是,我在arrayList ...
的开头收到了这个这里有很多错误。首先,标题应为“Mystic River”,但它跳过该行并存储“Drama”类别。此外,年份和价格信息对于文件读取过程的其余部分来说是明显错误的。在第一次输入之后,标题,类别和运行时间数据被适当地存储,如下所示。
导致数据存储错误的原因是什么?
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
答案 0 :(得分:2)
3个问题:
line
变量但由于dvdTitle
数据丢失而未使用该变量read()
年份会读取单个字符read()
价格会读取单个字符逻辑:
String line;
while ((line = kbd.readLine()) != null) {
String dvdTitle = line;
String dvdCategory = kbd.readLine();
String dvdRunningTime = kbd.readLine();
int dvdYear = Integer.parseInt(kbd.readLine());
double dvdPrice = Double.parseDouble(kbd.readLine());
DVDArrayList.add(new DVD(dvdTitle, dvdCategory, dvdRunningTime, dvdYear, dvdPrice));
}
DVDArrayList.stream().forEach(System.out::println);