2016-07-28 70 views
-1

我試圖從txt文件中讀取學生的地圖,之後我向地圖中添加一個新學生(現在比以前更大)並將其保存迴文件。關閉程序並重新加載文件中的數據後,新學生未保存。難以將文件寫入文件

HashMap<String, Student> studentObj = new HashMap<>(SIZE); 

try { 
    ObjectInputStream in = new ObjectInputStream(new FileInputStream(DEFAULT_FILE_NAME)); 
    studentObj = (HashMap<String, Student>) in.readObject();    
    studentObj.put(student.getStudentID(), student); 

    ObjectOutputStream out; 
    out = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(DEFAULT_FILE_NAME))); 
    out.writeObject(studentObj); 
    out.flush(); 
    System.out.println("here " + studentObj.size()); 
    in.close(); 
    out.close(); 
} catch (IOException e) { 
    throw new Exception("FILE IS NOT CREATED"); 
} catch (ClassNotFoundException e) { 
    throw new Exception("CLASS NOT FOUND EXCPETION"); 
} 
+2

打印異常的堆棧跟蹤:'e.printStackTrace()'。這會告訴你遇到的問題。 –

+0

我建議處理數據並保存,例如作爲文本文件而不是使用ObjectOutputStream。你可以for循環,將數據保存到數組中,並以一種可以讓你再次正確讀取它們的方式保存它們。 – xdevs23

+2

捕捉各種異常然後將它們作爲基本異常拋出並沒有真正的意義。要麼處理這些異常,要麼讓你的方法拋出那些特定的異常,或者簡單地拋出異常,如果你不關心它們是什麼類型的話。如果您打印異常的堆棧跟蹤,那麼您將看到問題所在。 – ManoDestra

回答

0

我的代碼沒問題。問題是,將對象保存到文件後,我關閉了應用程序並再次打開它。然後,構造函數創建一個覆蓋舊文件的新文件。我添加了一個if語句來第一次創建文件。我用txt使它簡單快速,因爲它只是一項小任務。我喜歡使用XML文件:)而且,JAVA可以保存對象。

0

我@同意xdevs23

而是將數據保存到數組(這將使用更多的內存),你可以寫

/*import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.OutputStreamWriter; 
import java.io.Writer;*/ 

HashMap<String, Student> studentObj = new HashMap<>(SIZE); 

try{ 

    ObjectInputStream in = new ObjectInputStream(new FileInputStream(DEFAULT_FILE_NAME)); 
    studentObj = (HashMap<String, Student>) in.readObject();    
    studentObj.put(student.getStudentID(), student); 
    in.close(); 
    System.out.println("here " + studentObj.size()); 

    FileOutputStream fos = new FileOutputStream(DEFAULT_FILE_NAME); 
    OutputStreamWriter osw = new OutputStreamWriter(fos); 
    Writer w = new BufferedWriter(osw); 

    // Iterate using YOUR hash keys 
    for(int i = 0; i < studentObj.size(); i++){ 
     w.write(studentObj.get(i).getString()); 
     w.write(studentObj.get(i).getStudent()); 
    } 

    w.close(); 

     catch (IOException e) { 
     throw new Exception("FILE IS NOT CREATED"); 
    } catch (ClassNotFoundException e) { 
     throw new Exception("CLASS NOT FOUND EXCPETION"); 
    } 
} 

而只是寫從ObjectInputStream中直接拉數據到文件