需要在JAVA中加载库存,从.dat或.txt文件输入

时间:2013-09-25 02:33:19

标签: java

好吧,伙计们,我已经做了很长时间了,我有一个电影库存

    Iroman 3
    Momento 2
    LifeofPi 2
    Superman 2
    The Crazies 1

得到一个异常:java.io.StreamCorruptedException:无效的流标题:49726F6E(MEANS Iron输入文件的第一部分。)

我理解为什么它不会让我加载: ObjectInputStream对先前使用ObjectOutputStream编写的基元数据和对象进行反序列化。 “inventory.dat可能不是以前使用ObjectOutputStream编写的序列化对象的文件。您可能希望使用InputStreamReader而不是

我尝试使用InputStreamreader,但显然我将使用的对象不适用于这种类型的输入法

-------清单是一个经过精心设计的数据项列表(实现为数据项链接列表的ADT排序列表),按每个项目所代表的标题排序。

--------每个库存项目包含一个标题,一个有价值,一个想要的价值和一个客户列表(等待名单)

 public static void main(String[] args)
{
    //
    //  Loading from the inventory.dat
    //
    try {
        FileInputStream fis = new 
                            FileInputStream("inventory.dat");
        ObjectInputStream ois = new ObjectInputStream(fis);
        Object o = ois.readObject();
        inventory = (SortedList)o;
    }
    catch (FileNotFoundException fnfe) {
        inventory = new SortedList();
    }
    catch (Exception e) {
        System.out.println(e);
    }

2 个答案:

答案 0 :(得分:2)

你说:

  

我尝试使用InputStreamreader,但显然我将使用的对象不适用于这种类型的输入法

不,没有明显的问题表明它不适用于这种类型的输入法。在代码工作之前不要假设任何事情,并且不要认为您认为明显的任何事情对我们来说是显而易见的。我唯一明白的是,如果你的文件包含文本数据,你不应该使用ObjectInputStream,因为这是用于序列化数据而不是文本,而是应该使用由BufferedReader包装的InputStreamReader。要么是这个,要么在文件中使用扫描仪。

您读入数据,拆分数据,然后使用其构造函数为读入的每行数据创建清单对象。

伪代码:

Create File from your file path String
Create Scanner object, fileScanner with the File
while the fileScanner has a nextLine to read
  String line gets fileScanner's nextLine.
  Create a line Scanner object, lineScanner, with line of text.
  name String gets lineScanner's next token
  value int gets lineScanner's next int.
  close lineScanner
  Create your object of interest with the name and value values
  put it in your collection
end while loop
close fileScanner

答案 1 :(得分:0)

也许在文件的最后一个虚拟对象。你忘记调用flush()并关闭你的流。 这将导致数据丢失