私はキーホルダーを書き込もうとしていますが、ObjectOutputStream を使用してパスワードを .dat ファイルに書き込んでから、ObjectInputStream を使用してそれらを読み取りたいと考えています。これはオブジェクトを書くための私のコードです:
public void toFile()
{
try
{
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("passwords.dat"));
for(int i = 0; i<this.nrOfPW; i++)
{
if(this.PWlist[i] instanceof longPW)
{
oos.writeObject((longPW)this.PWlist[i]);
}
else
{
oos.writeObject((PinPW)this.PWlist[i]);
}
}
oos.close();
}
catch(IOException e)
{
e.getStackTrace();
}
}
これは機能しているように見えますが、ファイルを再度読み取って PWlist 配列にオブジェクトを配置しようとすると、PinPW が Serializable を実装し、インポートされているにもかかわらず、PinPW はシリアライズ可能ではないと表示されます。PinPW の基本クラス (Info) も Serializable を実装し、それをインポートします。これは、ファイルを読み取ったコードです。
public void fromFile()
{
try
{
ObjectInputStream objIn = new ObjectInputStream(new FileInputStream("passwords.dat"));
while(objIn.readObject() != null)
{
if(this.nrOfPW == this.PWlist.length)
{
expand(10);
}
if(objIn.readObject() instanceof PinPW)
{
this.PWlist[this.nrOfPW] = (PinPW)objIn.readObject();
this.nrOfPW++;
}
else
{
this.PWlist[this.nrOfPW] = (longPW)objIn.readObject();
this.nrOfPW++;
}
}
objIn.close();
}
catch(EOFException e)
{
e.getStackTrace();
}
catch(IOException ex)
{
ex.printStackTrace();
}
catch(ClassNotFoundException ex)
{
ex.printStackTrace();
}
}
PWlist 配列は Info 配列であり、PinPW と longPW は Info を拡張します。
この問題を解決するにはどうすればよいですか?