2011-09-27 101 views
0

我想从文本文件中恢复以下数据。问题是我只能恢复一个字符串/行,我无法恢复其余的数据。如何恢复文本文件?

下面的代码:

public static String restore(String filename) throws IOException, ClassNotFoundException 
{ 
    FileInputStream fn = new FileInputStream(filename); 
    ObjectInputStream ob = new ObjectInputStream(fn); 
    String sample = (String) ob.readObject(); 

    return sample; 
} 
+4

这真的是一个文本文件吗?使用ObjectInputStream表明它实际上是一个带有由ObjectOutputStream创建的序列化Java对象的二进制文件。你遇到的问题究竟是什么?是否发生'ClassCastException'或什么?那个文件是如何创建的?等等 – BalusC

+1

你的问题对我来说不是很清楚。如果它是'文本'文件,为什么代码读取对象?如果它正在读取'Game'对象,则不应该读取任何'字符串/行'。什么是'其余数据'?有一件事可能有助于回答这些问题,还有十多个是SSCCE。为了更快地获得更好的帮助,请发布[SSCCE](http://pscode.org/sscce.html)。 –

+0

我已经编辑了代码,你可以在上面看到它。之前这是一个错误。 – sack

回答

3

您的代码不会只读的二进制文件中的第一个元素。

public static void restore(String filename) throws IOException, ClassNotFoundException 
{ 
    FileInputStream fn = new FileInputStream(filename); 
    ObjectInputStream ob = new ObjectInputStream(fn); 
    String string1 = (String) ob.readObject(); 
    String string2 = (String) ob.readObject(); 

} 

你确定在序列化时没有覆盖你的文件吗?

但据我了解你的问题,你不想序列化/反序列化一个字符串对象,而不是读/写文本文件。

如果您只是想读取/写入文件,那么您使用ObjectInputStream的方式错误。

AKE看看: http://download.oracle.com/javase/1.3/docs/api/java/io/BufferedReader.html

4

这是很难理解这个问题的意思,但如果你只是想从一个txt文件,并到一个数组读线,那么这两个方法可以帮助。

你只需要拨打电话String[] textArray = readFromFile("yourfilename.txt"); 这给你一个数组,每个文件行作为一个元素。

Scanner fScan(String filename) { 

     Scanner sc = null; 
     try { 
      sc = new Scanner(new File(fname)); 
     } catch (FileNotFoundException e) { 
      System.out.println("File not found:" + fname + " " + e); 
     } 
     return sc; 
} 

String[] readFromFile (String fname) { 
     Scanner sc = fScan(fname); 
      int length = 0; 
      String lineCounter; 
     while (sc.hasNext()){ 
      lineCounter = sc.nextLine(); 
      length++; 
     } 

     String[] array = new String[length]; 

     sc = fScan(fname); 

     for (int i = 0; i < length; i++) { 
     array[i] = sc.nextLine(); 
     } 

     sc.close(); 
     return array; 
}