2011-09-27 98 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; 
}