当前位置: 首页 > 知识库问答 >
问题:

读取文件时获取存储在对象arrayList中的错误数据

赵晟睿
2023-03-14

所以我不熟悉使用BufferedReader读取文件,也不熟悉Java中的ArrayList。我想知道为什么我的代码没有在arrayList中的每个DVD对象中存储正确的数据。我最初认为它的工作方式是,它从文本文件的顶部开始,读取行,然后将该信息存储在变量中。读取完一个双精度值后,它会根据以前找到的信息创建一个DVD对象。然后该文件将继续读取并存储arrayList中的剩余数据。但是,我在arrayList的开头收到了这个。。。

DVD片名: Drama, DVD类别: 130分钟, DVD运行时间: 2002, DVD年份: 50, DVD价格: 52.0

这里有很多错误。首先,标题应该是“神秘河”,但它跳过了这一行,而是存储了“戏剧”类别。此外,在文件读取过程的其余部分,年份和价格信息显然是错误的。在第一个条目之后,标题、类别和运行时数据被适当地存储,如下所示。

DVD片名: Everest, DVD类别:纪录片, DVD运行时间: 78分钟, DVD年份: 50, DVD Price: 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

共有1个答案

康恩
2023-03-14

3个问题:

  1. 您正在读取变量,但未使用它,因为dvdtile数据丢失
  2. read()for year将读取单个字符
  3. read()for price将读取单个字符

逻辑:

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);
 类似资料:
  • 我必须写一个程序: 提示用户输入输入文件的名称, 从输入文件中读取数据,并将有关汽车的信息存储在汽车对象数组列表中, 将数组列表中未排序的数据打印到屏幕上,如下所示: 我想不出前三步该怎么做。 我也有两个类,与这个项目,并将添加他们,如果需要/需要。因此,基本上只需要帮助了解如何从用户那里读取文本文件,将文本文件的内容添加到ArrayList中,并以格式化的方式打印出ArrayList的内容(我的

  • 我试图将包含Contact类型的序列化对象的文件读入ArrayList ContactsCollection。我遇到的问题是联系的对象从未添加到ArrayList中。

  • 我已经创建了一个可外部化的对象用户。除了我退出应用程序并重新打开它之外,它在写入和从存储中读取它时工作得很好。然后出现此错误: 在java.io.datainputstream.readfully(datainputstream.java:197)在java.io.datainputstream.readutf(datainputstream.java:609)在java.io.datainput

  • 我目前正在学习Python,遇到了以下错误: 这是我的代码: 为什么会出现这种情况?

  • 问题内容: 我有一个文件,其内容为python列表的形式,如下所示: 有什么办法可以将python文件读回到列表对象中吗?而不是使用整个文件,而是将其读取为字符串。 编辑:对于那些可能有兴趣的人,我使用(import ast)遇到了一个奇怪的问题,作为解决上述问题的建议。 我在其中使用的程序具有从yahoo finance python模块获取历史股票数据的功能。此函数与ast.literal_e

  • 我正在保存一个excel文件到设备(Android7)的存储,现在我想当用户点击按钮时打开excel文件,但现在当按钮点击应用程序会崩溃,而当im到我的存储和im打开文件直接在我的应用程序之外没有问题!!如果我的代码行错了,请帮忙,谢谢 日志:Android.os.FileUriExposedException:file:///storage/emulated/0/MessangerApp/Mes