0

我需要帮助从序列化文本文件中读取数组列表,我不相信我有问题但是我看不到它是否实际上存储了所有信息,因为我无法打印出来进行测试,这里是代码片段:当我从文件中读取时,我得到的 ArrayList 无法转换为 StoreAddress

   FileInputStream ios = new FileInputStream("C:\\Users\\Mr Cata\\Desktop\\Testingoutput.txt");
   ObjectInputStream ois = new ObjectInputStream(ios);
   StoreAddress SAR = (StoreAddress)ois.readObject();
   ArrayList<StoreAddress> ALStore = (ArrayList)ois.readObject();

   for(int i = 0; i < ALStore.size(); i++){
        String list = ALStore.get(i).toString();            
   }

   ios.close();

下一个

for(int i = 0; i < ALStore.size(); i++){
   ALStore.get(i);                  
}

...

for(int i = 0; i < ALStore.size(); i++){
   if (i >= ALStore.size())
   {
        ALStore.add(SA);}
   }

   FileOutputStream fos = new FileOutputStream("C:\\Users\\Mr Cata\\Desktop\\Testingoutput.txt");
   ObjectOutputStream oos = new ObjectOutputStream(fos);

   oos.writeObject(ALStore);
   fos.close();
}
4

3 回答 3

1

1.创建一个带有 Instance 变量的类,该变量将 ArrayList<Your_Type>.

2. 创建该类的对象,并将Serialize the object其存储在“Myfile.ser”中。

3.De-serializing,将对象转换为原始类型..

例如:

          Cat c = (Cat) inputS.readObject();

4.现在从此对象引用变量访问 ArrayList。

**eg:**

          c.myArr;

如果你愿意的话,你可以打印arraylist的元素 for-each ......像这样......

      for (Your_type t : myArr){

             System.out.println(t);

   }
于 2012-07-27T06:22:26.907 回答
1

当您写入文件时,您可以这样写

for(int i = 0; i < ALStore.size(); i++){
  if (i >= ALStore.size()) {
         ALStore.add(SA);
        }
    }
FileOutputStream fos = new FileOutputStream("C:\\Users\\MrCata\\Desktop\\Testingoutput.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);

oos.writeObject(ALStore);
fos.close();

在这里你正在写

ALStore

这是您提到的数组列表。但是当你阅读时,你的片段看起来像

FileInputStream ios = new FileInputStream("C:\\Users\\MrCata\\Desktop\\Testingoutput.txt");
 ObjectInputStream ois = new ObjectInputStream(ios);
 StoreAddress SAR = (StoreAddress)ois.readObject();
 ArrayList<StoreAddress> ALStore = (ArrayList)ois.readObject();
 for(int i = 0; i < ALStore.size(); i++){
    String list = ALStore.get(i).toString();

  }

 ios.close();

您需要注意的是您只编写了数组列表对象,但没有编写 StoreAddress。如果是这样,线路的需要是什么

 StoreAddress SAR = (StoreAddress)ois.readObject();

在片段中?这就是这里的问题。删除它,它应该可以正常工作。

于 2012-07-27T06:24:19.440 回答
1

在最后一个代码片段中,您执行了一次写入,ArrayList<ALStore>但是在您的第一个代码片段中,您尝试执行两次读取,第一个是StoreAddress实例。

因此,演员表异常。

顺便说一句,尽量遵守用驼峰写法编写变量的 Java 约定。

于 2012-07-27T06:25:53.940 回答