Подтвердить что ты не робот

Запись и чтение строк в/из внутреннего файла

Я вижу много примеров, как писать такие объекты String:

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

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

но не как прочитать их из внутреннего файла приложения. Большинство примеров предполагают конкретную длину строки для вычисления байтового буфера, но я не знаю, какая длина будет. Есть ли простой способ сделать это? Мое приложение будет записывать до 50-100 строк в файл

4b9b3361

Ответ 1

Написание строк таким образом не помещает в файл какие-либо разделители. Вы не знаете, где заканчивается одна строка, и начинается следующая. Вот почему вы должны указывать длину строк при чтении их.

Вместо этого вы можете использовать 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");
}