2012-03-01 64 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

相关问题