Я - Java студент, у которого есть небольшие проблемы. Поэтому я пишу программу под названием «LinkedInCLI», которая использует 4 различных класса:
- UserAccount
- LinkedInUser
- LinkedInException (Custom Exception)
- LinkedInCLI
В настоящее время я пишу класс "LinkedInCLI" для предварительной обработки различных функций. Одной из таких функций является добавление «пользователя» в список пользователей, объект LinkedInUser определяется по имени, паролю «учетной записи» и «типа учетной записи»
На самом деле они все Строки, определяющие информацию о «Пользователе». Его конструктор выглядит следующим образом.
public class LinkedInUser extends UserAccount implements java.io.Serializable ,Comparable<LinkedInUser>{
public LinkedInUser(String user, String pass , String type) {
super(user, pass, type);
}
Хорошо, теперь уже к вопросу:
Как только я создал этих пользователей, они go добавили ArrayList в LinkedInUsers, который выглядит следующим образом.
private static List<LinkedInUser> users = new ArrayList<>();
Он расположен внутри LinkedInCLI и НЕ внутри основного метода. он расположен рядом с приватными полями и т. д.
Я хочу сериализовать ArrayList в файл .DAT, после того, как я это сделаю, я хочу завершить свою программу, выполнить ее снова и прочитать предыдущий ArrayList из выполнение программы. Как только я это сделаю, ArrayList должен быть таким же, как и выполнение до него.
Но я продолжаю сталкиваться с «NotSerializableException». Я уже написал ObjectOutputStream и ObjectInputStream, и они выглядят правильно написанными, но что-то не так, и это не будет писать объект. Вот как выглядят мои потоки
ObjectOutputStream oos = null;
try
{
// CREATE file path and display it
new File(PATH).mkdirs();
System.out.println(PATH);
// SAVE arraylist
oos = new ObjectOutputStream(new FileOutputStream(PATHPLUSNAME));
oos.writeObject(users);
System.out.println("Writing users to file");
System.out.println(": " + users);
//CLOSE resources
oos.flush();
oos.close();
}
catch (FileNotFoundException FNFO) {
System.out.println("The file was not found");
}
catch(NotSerializableException NSEO) {
System.out.println("Type is not serializable");
}
catch (IOException IOEXO) {
System.out.println("Could not serialize users");
}
try {
LinkedInUser test = new LinkedInUser();
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(PATHPLUSNAME));
ArrayList usersCopied = (ArrayList<LinkedInUser>) ois.readObject();
users.addAll(usersCopied);
ois.close();
}
catch (FileNotFoundException FNFI) {
System.out.println("The file was not found");
}
catch (IOException IOEXI) {
System.out.println("Could not Deserialize users");
}
catch (ClassNotFoundException CLNI) {
System.out.println("Could not find class");
}
Мой вопрос действительно такой: почему, черт возьми, это исключение продолжает выдавать ? Сначала это было только IOException, но потом я посмотрел под исключения и попробовал их все, и выяснил, что это именно NotSerializableException.
ПРИМЕЧАНИЕ. Все остальные классы также реализуют сериализуемый ...
--------------------------- ------------------------------------------------- Эта проблема была решена, проблема заключалась в том, что мой метод UserAccount реализует сериализуемый, НО он также реализовал сопоставимый, который НЕ реализует сериализуемый, я узнал это, посмотрев документ oracle, также , Вверху класса UserAccount было несколько случайных сканеров, которые также нельзя было сериализовать.
Всем, кто помогает мне решить эту проблему, спасибо. Вы, ребята, потрясающие!