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. Create a class with and Instance variable which will an ArrayList<Your_Type>.

2. Create an object of this class, and Serialize the object and store it in "Myfile.ser" .

3. When De-serializing , cast the object to it original type..

eg:

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

4. Now access the ArrayList from this object reference variable.

**eg:**

          c.myArr;

You can print the elements of the arraylist using for-each if you want..like this..

      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();

ここであなたが書いているのは

ALストア

あなたが言及している配列リストです。しかし、読んでいるとき、スニペットは次のようになります

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>ますが、最初のコード スニペットでは 2 つの読み取りを試みます。最初の読み取りはStoreAddressインスタンスです。

したがって、キャスト例外。

ところで、キャメルケースで変数を書くというJavaの慣習に従うようにしてください。

于 2012-07-27T06:25:53.940 に答える