2010-11-19 49 views
12

讀字符串/我看到了很多例子來說明如何寫這樣的String對象:寫入和從內部文件

String FILENAME = "hello_file"; 
String string = "hello world!"; 

FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE); 
fos.write(string.getBytes()); 
fos.close(); 

但不知道如何讀他們的內部應用程序文件回來。大多數例子假定特定的字符串長度來計算字節緩衝區,但我不知道長度是多少。有沒有簡單的方法來做到這一點?我的應用程序會將最多50-100個字符串寫入文件

回答

14

以這種方式編寫字符串不會在文件中放入任何分隔符。你不知道一個字符串在哪裏結束而下一個開始。這就是爲什麼您在閱讀時必須指定字符串的長度。

您可以使用DataOutputStream.writeUTF()DataInputStream.readUTF(),因爲這些方法會將字符串的長度放在文件中,並自動讀回正確數量的字符。

在Android環境下,你可以做這樣的事情:

try { 
    // Write 20 Strings 
    DataOutputStream out = 
      new DataOutputStream(openFileOutput(FILENAME, Context.MODE_PRIVATE)); 
    for (int i=0; i<20; i++) { 
     out.writeUTF(Integer.toString(i)); 
    } 
    out.close(); 

    // Read them back 
    DataInputStream in = new DataInputStream(openFileInput(FILENAME)); 
    try { 
     for (;;) { 
      Log.i("Data Input Sample", in.readUTF()); 
     } 
    } catch (EOFException e) { 
     Log.i("Data Input Sample", "End of file reached"); 
    } 
    in.close(); 
} catch (IOException e) { 
    Log.i("Data Input Sample", "I/O Error"); 
} 
+1

謝謝,我已經嘗試過,但出於某種原因DataInputStream.readUTF()只讀取第一個字符串。但我可以做一些錯誤的地方 – mishkin 2010-11-19 21:09:12

+0

我給我的答案添加了一些代碼,看看是否有幫助。 – 2010-11-19 21:18:19

+0

不錯,它的作品!非常感謝,亞歷山大!我喜歡如何閱讀,直到文件結尾 - 我正在考慮快速創建不爲每一行創建一個String對象,並且你也回答了我的第二個問題:) – mishkin 2010-11-19 22:01:52