Я пытаюсь написать keyholder, и я хочу написать пароли в .dat-файл с помощью ObjectOutputStream, а затем прочитать их с помощью ObjectInputStream. Это мой код для записи объектов:Невозможно прочитать сериализуемый класс из файла .dat
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 не сериализации, хотя PinPW реализует Serializable и импортируется. Базовый класс 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 является массив информации, и PinPW и longPW распространяется информация.
Что мне делать, чтобы исправить эту проблему?
Не могли бы вы опубликовать созданный след исключения и стека - см. Мой ответ на возможное исправление этой проблемы и исправление * определенного * на ошибку. –
[Без темы] По соглашению классы Java называются с использованием UppercaseStartingCamelCase - это означает, что ваш класс 'longPW' должен быть' LongPW'. Аналогично, переменные называются с использованием lowercaseStartingCamelCase, поэтому ваша переменная 'PWList' должна называться' pwList'. –
Вы можете упростить свой метод для создания файла. Вам не нужно проверять тип объекта и бросать его при вызове 'writeObject', так как здесь параметр' Object'. Вы должны хотя бы гарантировать, что все прошедшие объекты реализуют интерфейс 'java.io.Serializable', поскольку это не выполняется компилятором (он принудительно используется потоком вывода сериализации). –