2012-03-01 13 views
0

私はStreamCorruptedExceptionに関する多くの記事を見てきましたが、多くはサーバーアプリケーションと関係しています。 最初にオフにします。これは代入の一部ですが、動作しないコードは私の家庭教師が私に与えたコードです。私は他のすべてをしました!私はObjectInputStreamを使用している場合はが必要でした(これは私にナットを駆動しています)。私はEOFException、FileNotFound(.getPath()と.getName()を使用して)ファイル選択を使用していたStreamCorruptedException、TextFileからの読み込み(Java)

ObjectOutputStreamを使用してテキストファイルにデータを書き込むには?私はoosを使用するために私の保存メソッドを書き直し、それはテキストファイルに奇妙なアイコンを追加し、私は鋳造エラーを持っています。このため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"); } 
     } 
    }); 
MY SAVING/LOADINGクラスで

* *

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を実装していますが、私は正しいライターを閉じていることを確認しました。 ありがとう! :)

* EDIT - 使用するスキャナ

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を使用してください。あなたのコメントを受けて


* EDIT *

、あなたは近いですが、あなたはスキャナの権利を使用していません。あなたはファイルから各行を取得し、それからアーティストとタイトルを解析する必要があります。そして、これらの情報から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

+0

ありがとうございました!最後に!!あなたは神を送ります。以前はスキャナを使用しましたが、テキストファイルは使用していません。 – liloka

+0

問題はありませんが、残りのプログラムでは幸運です。 – Perception

関連する問題