2012-03-01 67 views
0

我查看了很多關於StreamCorruptedException的帖子,但很多都是關於服務器應用程序的。 首先;這是一個任務的一部分,但不工作的代碼是我的導師給我的代碼。我做了所有其他事情! (這使我瘋了)當使用文件選擇器(使用.getPath()和.getName())時,我有EOFException,FileNotFoundStreamCorruptedException,使用ObjectInputStream從TextFile中讀取(Java)

首先:如果我使用ObjectInputStream,是否需要使用ObjectOutputStream在文本文件中寫入數據?我甚至改寫了我的保存方法來使用oos,並在文本文件中添加了奇怪的圖標,並且出現了投射錯誤。

* IN MY GUI ActionEvent的方法是:*

openDiscsItm.addActionListener(new ActionListener() 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
      fc = new JFileChooser(); 
      fc.setFileSelectionMode(JFileChooser.FILES_ONLY); 
      fc.addChoosableFileFilter(new FileChooserFilter()); 

      int value = fc.showOpenDialog(MainForm.this); 

      try { 
       System.out.println("D: 1"); 
       if(value == JFileChooser.APPROVE_OPTION); 
       { 
        System.out.println("D: 2"); 
        File file = fc.getSelectedFile(); 
        System.out.println("D: 3"); 
         //String fileName = file.getPath(); 
         store.loadDiscsArray(file); 
        System.out.println("D: 4"); 
         changePnl.removeAll(); 
         changePnl.add(create_CDPnl()); 
         changePnl.revalidate(); 
       } 
      } catch (Exception err) { System.out.println("STILL NOT WORKING :D"); } 
     } 
    }); 

* IN MY保存/載入CLASS *

public void saveDiscsArray(String fileName) 
{ 
    try 
    { 
     FileWriter fw = new FileWriter(fileName); 
     BufferedWriter bw = new BufferedWriter(fw); 
     PrintWriter out = new PrintWriter(bw); 
     out.println("Title,Artist"); 

     for (int i = 0; i < discsArray.size(); i++) 
     { 
      CD c = discsArray.get(i); 
      String aTitle=c.getTitle(); 
      String aArtist = c.getArtist(); 
      out.println(aTitle+","+aArtist); 
     } 

     out.close(); 
     bw.close(); 
     fw.close(); 
    } catch (Exception e) 
     { 
     System.out.println("Error: " + e); 
     } 
} 
public void loadDiscsArray(File fileName) throws IOException, ClassNotFoundException 
{  
    try { 
     System.out.println("1"); 
     BufferedInputStream br = new BufferedInputStream(new FileInputStream(fileName)); 
     ObjectInputStream os = new ObjectInputStream(br); 

     System.out.println("2");  //Not Getting here * 
     try { 
      CD obj = (CD) os.readObject(); 
      if (obj instanceof CD) 
      { discsArray.add((CD) obj); 
       System.out.println(obj); } 
     } finally 
      { os.close(); } 
    } catch (Exception ex) 
     { System.out.println(ex); } 

    System.out.println("Done!"); 
} 

我還包含了一些SOP看哪裏代碼實際上正在到達。 該類確實實現了Serializable,我也檢查了我正在關閉正確的作者。 謝謝! :)

*編輯 - 使用掃描儀

BufferedInputStream br = new BufferedInputStream(new FileInputStream(fileName)); 
     Scanner sc = new Scanner(br); 

     System.out.println("2");  //Not Getting here * 
     try { 
      Object obj = sc.nextLine(); 
      //if (obj instanceof CD) 
       discsArray.add((CD) obj); 
       System.out.println(obj); 
     } finally 
      { sc.close(); } 

現在,我得到一個錯誤鑄件從字符串到CD。

回答

1

您使用PrintWriter寫入文件正常文本。您無法使用ObjectInputStream讀取此文件,因爲格式完全錯誤。改爲使用Scanner


*編輯*

在回答您的意見,您更接近,但你不使用掃描儀的權利。您需要從文件中獲取每行,然後從中解析出藝術家和標題。然後,從這些信息構建CD對象:

String line = sc.nextLine(); 
String[] parts = line.trim().split(","); 
String title = parts[0]; 
String artist = parts[1]; 
CD cd = new CD(title, artist); 
discsArray.add(cd); 
+0

我使用掃描儀試過,(添加編輯) 但我怎麼正確地投字符串返回到CD(標題,藝術家)。我收到了投射錯誤。 – liloka 2012-03-01 20:37:13

+0

謝謝!最後!!你是上帝寄來的。我之前使用過掃描儀,但從未使用過文本文件。 – liloka 2012-03-02 10:44:24

+0

沒問題,與程序的其餘部分祝你好運。 – Perception 2012-03-02 11:52:54