FileOutputStream записывает сообщение в файл, только если я прочитал его между сохранениями - PullRequest
1 голос
/ 28 марта 2020

Я пытаюсь написать класс File для чтения / записи, и для этого я выполнил пример действия с кнопкой для сохранения в файл, который я создаю, кнопкой для чтения из файла и textView для чтения. Я попробовал несколько тестовых случаев, чтобы увидеть, работает ли мой FileRW, и он работает нормально, если я читаю файл после каждого сообщения, но если я пытаюсь сохранить несколько сообщений в файл без чтения между последовательными попытками, в файл записывается только последнее сообщение. , Я не знаю, что вызывает такое поведение.

Вся помощь приветствуется.

file = new File(getFilesDir() + "CheckFile.txt");

save.setOnClickListener(new View.OnClickListener()
{
    @Override
    public void onClick(View v)
    {
        try
        {
            FileOutputStream fos = new FileOutputStream(file);
            fos.write(text.getText().toString().getBytes());
            fos.close();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
});


read.setOnClickListener(new View.OnClickListener()
{
    @Override
    public void onClick(View v)
    {
        try
        {
            BufferedReader br = new BufferedReader(new FileReader(file));

            while ((line = br.readLine()) != null)
            {
                textString.append(line);
                textString.append('\n');
            }
            br.close();
            Log.i("Ranai text", textString+"");
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
});

Ответы [ 2 ]

1 голос
/ 28 марта 2020

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

FileOutputStream fos = new FileOutputStream(file, true);
0 голосов
/ 28 марта 2020

Используйте

FileOutputStream fos = new FileOutputStream(file, true);

, который вы хотите добавить в конец файла, а не записать в начало

...