2011-12-20 16 views
1

文字列でファイルを書き込もうとしています。しかし、私が読んだとき、それは正方形ともので奇妙に見えます。私はペーストをコピーできませんでした!ここでファイルを読み込もうとしています

はコードです:

import java.io.*; 

public class ObjectOutputStreamDemo { 
public static void main(String[] args) throws ClassNotFoundException { 
    try { 
     //Now Im writing 
     ObjectOutputStream output = new ObjectOutputStream(new FileOutputStream("fruit.dat")); 

     String ord[] = { "Banana", "Mango", "Apple", "Passionfruit","Orange" }; 

     for (int i = 0; i < 5; i++) { 
      output.writeObject(ord[i]); 
     } 
     output.close(); 

     //Now Im trying to read. 
     BufferedReader in = new BufferedReader(new FileReader("fruit.dat")); 
     String str; 
     while ((str = in.readLine()) != null) { 
      System.out.println(str); 
     } 

    } catch (IOException e) { 
     System.out.println("Problem with file."); 
    } 

} 
} 
+2

短い答え: 'ObjectOutputStream'を使ってファイルに書き込む場合は、' BufferedReader' **ではなく、 'ObjectInputStream'を使ってファイルを読み込みます。 'Reader'を使ってファイルを読みたいなら、あなたは' Writer'でファイルを書くべきです。 –

答えて

5

あなたはObjectOutputStreamを作成している - それは、基本的にシリアライズされたオブジェクトの完全なバイナリファイルです。それは決してテキストファイルではなく、そのように扱われるべきではありません。

テキストファイルをご希望の場合は、Writerの説明が必要です。 FileOutputStreamをラッピングするOutputStreamWriter。一度に行を書きたい場合は、OutputStreamWriterBufferedWriterにラップしてください。

"シリアライズされた文字列を含むバイナリファイル"と "テキストファイル"の区別を理解することが非常に重要です。

+0

よろしく!しかし、私はObjectOutputStreamを使用する必要があります。読者を変えるにはどうしたらいいですか? – user1051477

+0

@ user1051477: 'ObjectInputStream'を使用してください。これは' ObjectOutputStream'の反対側で、 'ObjectOutputStream'によって書き込まれたデータの読み方を知っています。 –

+0

ペアで使用するBufferedWriter、BufferedReaderまたはオブジェクトライターとオブジェクトリーダー – karakuricoder

関連する問題