public class Access {
private static List<Person> list = new ArrayList<Person>(); private static List listo = new ArrayList(); public static void main(String[] args) {
File file = new File("C:\\x.txt");
FileOutputStream fo = null;
FileInputStream fi = null;
ObjectOutputStream oop = null;
ObjectInputStream ooi = null;
try {
fo = new FileOutputStream(file);
fi = new FileInputStream(file);
try {
oop = new ObjectOutputStream(fo);
ooi = new ObjectInputStream(fi);
try {
//我想在这里取的x.tex里list对象为什么取不到 list = (ArrayList) ooi.readObject();
} catch (EOFException e) {
Person p1 = new Person();
String name = JOptionPane.showInputDialog("请输入名字");
p1.setName(name);
list.add(p1);
oop.writeObject(list);
oop.flush();
for (int i = 0; i < list.size(); i++) {
p1 = list.get(i);
System.out.println(p1.getName());
}
}
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
fi.close();
fo.close();
oop.close();
ooi.close();
} catch (IOException e) {
e.printStackTrace();
} } }}
第一次我输入人的名字是aaa,关闭程序,第2次我输入人的名字是bbb,但是结果不是输出aaa和bbb,只是bbb!
我不是要在文件后追加list对象,我想通过这个一个list集合对象保存Person对象,然后把list对象输出到x.txt,覆盖之前的list对象
我想把第一次x.txt的list对象Read出来,然后用第一次list对象加了第2个人后,在输出x.txt里面,然后遍历这个list对象

解决方案 »

  1.   

        第一次输入关闭程序。第二次输入又打开了程序。这样就造成你的输入不是一条线程,而是两条不同的线程。你可以用While(true){}来接收你输入的。这样说不会产生两条线程了。
      

  2.   

    同一个文件,同时读写的问题吧。
    先开inputstream读,后开outputstream写,就好了。
      

  3.   

    public FileOutputStream(File file, boolean append)请看FileOutputStream的这个构造方法
      

  4.   

    默认fo = new FileOutputStream(file);的时候会将文件清空,所以读的时候总是空的。但是如3楼所说使用append方式也不行,文件中只能放一个List对象。所以如我在2楼所说,先读,后写,就不会有问题了。
      

  5.   


    嗯,没看清楚lz的代码是直接把一个list写进去,我以为是一个一个string的写
    的确应该先做读取,然后再去写入