从内部文件写入和读取字符串

mis*_*kin 12 string android file

我看到很多例子如何写这样的String对象:

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

FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
fos.write(string.getBytes());
fos.close();
Run Code Online (Sandbox Code Playgroud)

但不是如何从内部应用程序文件中读取它们.大多数示例假设特定的字符串长度来计算字节缓冲区,但我不知道长度是多少.有一个简单的方法吗?我的应用程序最多可以为文件写入50-100个字符串

Ale*_*min 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");
}
Run Code Online (Sandbox Code Playgroud)