2015-03-14 6 views
1

Я пытаюсь создать коллекцию фильмов и сохранить их в файле. Все работает нормально, пока не открою текстовый файл, и я получаю следующее:Как написать коллекцию объектов в файл?

" ~ L releaseDateq ~ xp ý² t Sci-Fit Inceptiont 30 июля 2010x «

Я много искал и не мог найти способ сделать эту работу. И я также получаю« этот сериализуемый класс не объявляет статическую окончательную ». Можете ли вы, ребята, помочь мне, пожалуйста?

public class movie implements Serializable { 

private String name; 
private String category; 
private String releaseDate; 
private int rating; 
private int id; 

public movie(String name, String category, String releaseDate, int rating, int id){ 
    this.name=name; 
    this.category=category; 
    this.releaseDate=releaseDate; 
    this.rating=rating; 
    this.id=id; 

} 

public void add(List<movie> list, movie A){ 
    list.add(A);  
} 


public void delete(List<movie> list, movie A){ 
    list.remove(A); 
} 

public void save(List<movie> list) throws IOException{ 
    try { 
     FileOutputStream fout = new FileOutputStream("tmp.txt"); 
     ObjectOutputStream out = new ObjectOutputStream(fout); 
     out.writeObject(list); 
     out.close(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

public static void main(String[] args) throws IOException{ 
    movie A = new movie("Inception", "Sci-Fi", " 30 July 2010", 8, 1375666); 
    List<movie> list = new ArrayList<movie>(); 
    A.add(list, A); 
    A.save(list); 

} 

ответ

0

«¬í стерад java.util.ArrayListxÒ ™ Ça Я sizexp ш С.Р. tema3ex1.movie} ÆöôQ¹ª Я IDI ratingL КатегорияФутболки Ljava/языки/строка, L nameq ~ L releaseDateq ~ хр ý² т Научно-Fit Inceptiont 30 July 2010x "

Вы получаете этот вид вывода, потому что вы сериализуете свой объект. Если вы хотите сохранить содержимое вашего ArrayList в файл в читаемом формате, вам нужно написать его содержимое с использованием одного из классов API-скриптов, таких как FileWriter.

И я также получаю «это сериализация класса не объявляет статического окончательного

Это предупреждение, а не ошибка компиляции. Цель добавления статического serialVersionUID к классу, чтобы обеспечить способ убедиться, что класс не изменился между временем его сериализации и десериализации. Представьте, что вы сериализуете класс, который имеет 2 поля. Вы запускаете свое приложение, оно сериализует ваш объект. Пока все хорошо. добавьте еще одно поле в класс. Вы запускаете свое приложение и десериализуете свой сериализованный объект. Как JVM знает, что ваш класс изменился? Правильно, это com paris serialVersionUID сериализованного объекта с serialVersionUID типа класса. Если он обнаружит, что идентификаторы не совпадают, будет выбрано исключение. Следствием этого является то, что всякий раз, когда вы меняете сериализуемый класс, вы должны убедиться, что вы изменяете значение поля serialVersionUID, чтобы защитить приложение от непонятных проблем.

Обратите внимание, что хотя статические поля не являются сериализованными, serialVersionUID является специальным идентификатором, значение которого записывается в вывод.

+0

Спасибо! Теперь я понимаю. – Tux

+0

Не забудьте принять любой из ответов, которые, по вашему мнению, помогут вам решить ваши вопросы. – CKing

0

Я думаю, что вам нужен файл с человекообразным текстом. Чтобы этого добиться, вы не можете использовать сериализацию java. Вам нужно выбрать формат (например, csv, xml, Json или что-то еще) и захватить библиотеку сериализации для этого. При этом вы можете написать программу в java, которая могла бы прочитать этот файл и преобразовать его в объект (разбор файла). Вы можете использовать Jackson CSV.

Смежные вопросы