2011-12-20 59 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写入文件,则应该使用ObjectInputStream而不是BufferedReader **来读取文件。相反,如果您想要使用'Reader'读取文件,您应该使用'Writer'编写文件。 – 2011-12-20 12:12:35

回答

5

你创建一个ObjectOutputStream - 这基本上是一个二进制文件全序列化对象。它不是一个文本文件,不应该被视为这样。

如果你想要一个文本文件,你需要一个Writer的一些描述 - 例如一个OutputStreamWriter包装FileOutputStream。如果您想一次写入一行,则可能需要将OutputStreamWriter包装在BufferedWriter中。

理解“包含序列化字符串的二进制文件”和“文本文件”之间的区别非常重要。

+0

好吧!但我需要使用ObjectOutputStream。我怎样才能改变我的阅读器,使其正确? – user1051477 2011-12-20 12:14:12

+0

@ user1051477:使用'ObjectInputStream' - 这是'ObjectOutputStream'的另一面,它有效地知道如何读取由'ObjectOutputStream'写入的数据。 – 2011-12-20 12:15:13

+0

将BufferedWriter与BufferedReader配合使用或使用对象读取器的对象编写器 – karakuricoder 2011-12-20 12:15:40