文件寫入對象

早上起來把平臺上的作業完成,最後一題是將對象寫入文件再從文件中讀取對象,開始用ObjectOutputStream處理流放在FileOutputStream字節流上面對對象進行寫入,然後ObjectInputStream對文件進行讀取,每次都只能讀取第一個對象和報一個莫名其妙的錯。後來將對象存入list集合裏面,再把集合作爲一個對象寫入文件,但是這個操作有點費力,每次控制檯添加信息的時候都要把之前的信息也打上去。想了又想看了又看搞不懂就去百度了...

    對象序列化不能像普通文件一樣直接追加對象。每次寫入對象都會被覆蓋。Java默認的對象序列化是每次寫入對象都會寫入一點頭aced 0005(佔4個字節),然後每次讀取都讀完頭然後在讀內容。解決方法就是先判斷文件是否存在。如果不存在,就先創建文件。然後寫了第一個對象,也寫入了頭aced 0005。追加的情況就是當判斷文件存在時,把那個4個字節的頭aced 0005截取掉,然後在把對象寫入到文件。

  boolean isexist = false;//定義一個用來判斷文件是否需要截掉頭aced 0005

        //判斷文件是否存在

if(files.exists()){

    isexist = true;

//創建一個文件輸出字節流

    FileOutputStream fo = new FileOutputStream(files,true);

objOut = new ObjectOutputStream(fo);//字節 流上加 對象處理流

long pos = 0;

if(isexist){

pos = fo.getChannel().position()-4;

fo.getChannel().truncate(pos);

}

objOut.writeObject(card);//進行序列化

objOut.close();

}else{//文件不存在

files.createNewFile();//創建文件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章