2011-07-05 57 views
1

我有以下方法:是否有可能從不同的方法寫入相同的文件?

public static void writeContestantsToFile(ArrayList<Contestant> contestants) throws IOException { 
    FileOutputStream fos = new FileOutputStream("minos.dat"); 
    ObjectOutputStream oos = new ObjectOutputStream(fos); 

    oos.writeObject(contestants); 
    oos.flush(); 
    oos.close(); 
} 

但我想知道是否我可以用另一個ArrayList中再次minos.dat寫入文件?例如有另一種類似的方法:

public static void writeContestantsToFile(ArrayList<Times> times) throws IOException { 
    FileOutputStream fos = new FileOutputStream("minos.dat"); 
    ObjectOutputStream oos = new ObjectOutputStream(fos); 

    oos.writeObject(times); 
    oos.flush(); 
    oos.close(); 
} 

我能否同時檢索arraylist和參賽者的時間?或者我需要寫入單獨的文件?

回答

2

可以,但如果你不希望覆蓋文件的內容,但只追加,打開它就像:

FileOutputStream fos = new FileOutputStream("minos.dat", true); 

(使用this constructor

+0

這不適用於'ObjectOutputStreams'。當你閱讀連接時,你會得到'StreamCorruptedException:無效類型代碼AC'。 – EJP

1

如果你的意思是按順序在一個線程中,然後使用@MByD解決方案。它被稱爲追加。如果這是多線程的,那麼你將需要阻塞和同步。

+0

+1用於提及同步。 – MByD

0

不適用於對象流。如果沒有特殊的措施,您不能使用對象輸出流追加到文件。你必須:

  • 離開文件打開
  • 同步訪問它
  • 使用相同ObjectOutputStream的過程
  • 的生活,並確保它是封閉的,當你退出。
相關問題