【发布时间】:2017-04-25 09:21:20
【问题描述】:
这是一个简单的示例,我尝试将存储在ArrayList 中的对象写入/读取文件。
正在写入文件。读取文件仅适用于我的ArrayList 中的第一个对象。我应该如何把它变成一个循环?
我尝试过类似的东西:
`while(ois !=null) {
Person result = (Person) ois.readObject();
persons.add(result);
}
但它不起作用。
这里是完整的测试代码:
public class Data {
static ArrayList<Person> persons = new ArrayList<Person>();
public static void savePersons() throws IOException{
FileOutputStream fout = null;
ObjectOutputStream oos = null;
/** Make 5 'Person' object for examle */
for(int i = 0; i<5; i++){
Person personTest = new Person("name", "surname", "email", "1234567890");
persons.add(personTest);
}
try{
fout = new FileOutputStream("C:\\data.dat", true);
oos = new ObjectOutputStream(fout);
oos.writeObject(persons);
System.out.println("Saving '" +persons.size()+ "' Object to Array");
System.out.println("persons.size() = " +persons.size());
System.out.println("savePersons() = OK");
} catch (Exception ex) {
System.out.println("Saving ERROR");
} finally {
if(oos != null){
oos.close();
}
}
}
public static void loadPersons() throws IOException{
FileInputStream fis = null;
ObjectInputStream ois = null;
/** Clean 'persons' array for TEST of load data*/
persons.removeAll(persons);
try {
fis = new FileInputStream("C:\\data.dat");
ois = new ObjectInputStream(fis);
Person result = (Person) ois.readObject();
persons.add(result);
System.out.println("-------------------------");
System.out.println("Loading '" +persons.size()+ "' Object from Array");
System.out.println("persons.size() = " +persons.size());
System.out.println("loadPersons() = OK");
} catch (Exception e) {
System.out.println("-------------------------");
System.out.println("Loading ERROR");
} finally {
if(ois != null){
ois .close();
}
}
}
}
人物类:
public class Person implements Serializable {
private String name;
private String surname;
private String mail;
private String telephone;
Person person;
public Person(String n, String s, String m, String t){
name = n;
surname = s;
mail = m;
telephone = t;
}
public String getName() {
return name;
}
public String getSurname() {
return surname;
}
public String getMail() {
return mail;
}
public String getTelephone() {
return telephone;
}}
主类:
public class Test {
public static void main(String[] args) {
Data.savePersons();
Data.loadPersons();
}}
【问题讨论】:
-
请显示
Person类 -
您正在将完整的 ArrayList 写入文件,因此 readObject 将返回 ArrayList 而不是 Person。
-
@cricket_007 我刚刚添加了我的“人”类
-
请同时包含运行程序的主方法或单独的测试类,而不仅仅是脱离上下文的代码sn-p
-
尝试使用
persons = (ArrayList<Person>) ois.readObject();而不是Person result = (Person) ois.readObject(); persons.add(result);
标签: java file serialization arraylist writing