2015-12-23 88 views
0

編輯(爲了混淆):null已被寫入文件「abc」和「efg」。創建FileOutputStream對象後文件發生變化,即使沒有寫入文件

運行下面的代碼,文件「ABC」改變其最初null的內容後,我在每一次執行得到EOFException類:

ObjIStream = new ObjectInputStream(new FileInputStream("abc")); 
M[][] objs = (M[][]) ObjIStream.readObject(); 
FS.objs = objs; 
ObjIStream.close(); 

這裏,FS.objs是類FS的靜態成員鍵入M[][]類型。

在另一方面,這其中有對文件沒有影響,我任何被處決的人數後,沒有得到任何例外:

ObjIStream = new ObjectInputStream(new FileInputStream("abc")); 
M[][] objs = (M[][]) ObjIStream.readObject(); 
ObjIStream.close(); 

編輯:我剛剛發現存在於類FS麻煩在這種形式:

static{ 
try { 
    ObjOStream = new ObjectOutputStream(new FileOutputStream("abc")); 
    ObjOStream.close(); 
    ObjOStream = new java.io.ObjectOutputStream(new java.io.FileOutputStream("efg")); 
    ObjOStream.close(); 
} 
catch (IOException ex) { } 
} 

它是如何煩惱嗎?

+0

正如你可能已經知道的那樣,閱讀文件不應該改變它,並且不能改變文件本身,所以你需要向我們展示代碼,這實際上是爲了我們能夠猜測什麼可能是錯誤的。請顯示你的文件和你的[mcve]。 –

+0

嗯,我剛剛發現我有這樣的代碼在FS: 'static { 嘗試ObjOStream = new ObjectOutputStream(new FileOutputStream(「abc」)); ObjOStream.close(); ObjOStream = new java.io.ObjectOutputStream(new java.io.FileOutputStream(「efg」)); ObjOStream.close(); } catch(IOException ex){ } }' –

+0

是的,這是麻煩,但它是如何令人煩惱? –

回答

0

問題是new FileOutputStream("abc")本身,這意味着new FileOutputStream("abc", false)。它會清理文件中的所有數據,因爲您不會追加任何內容。它調用FileOutputStream.open(String name, boolean append)這是一個private native函數。它以覆蓋模式擦除文件中的所有內容。

相關問題