Обработка файлов: новый файл создается даже после использования добавления

Итак, я пытаюсь создать файл в моем внутреннем хранилище, но следующий код всегда создает новый файл и сохраняет только самую последнюю строку в файле. Часть следующего кода (try {}) используется дважды. Кто-нибудь может сказать мне, что я делаю не так? В первом случае сообщение отправляется нами и передается в listview, а также копируется в файл в качестве резервной копии, во втором случае сообщение отправляется нам и также передается в listview, снова делая резервную копию строки в файл.

File file = new File("/storage/emulated/0/BlueChat.txt");

private Handler handler = new Handler(new Handler.Callback() {

    @Override
    public boolean handleMessage(Message msg) {
        switch (msg.what) {

            case MESSAGE_WRITE:
                byte[] writeBuf = (byte[]) msg.obj;

                String writeMessage = new String(writeBuf);
                chatMessages.add("Me: " + writeMessage);
                chatAdapter.notifyDataSetChanged();
                try
                {
                        if (!file.exists())
                        {
                            file.createNewFile();
                        }
                        else
                        {
                            FileWriter fw = new FileWriter(file.getAbsoluteFile());

                            fw.append("Me: " + writeMessage);
                            fw.close();
                        }
                }
                catch (IOException e)
                {
                    e.printStackTrace();
                }

                break;
            case MESSAGE_READ:
                byte[] readBuf = (byte[]) msg.obj;

                String readMessage = new String(readBuf, 0, msg.arg1);
                chatMessages.add(connectingDevice.getName() + ":  " + readMessage);
                chatAdapter.notifyDataSetChanged();

                try
                {
                    if (!file.exists())
                    {
                        file.createNewFile();
                    }
                    else
                    {
                        FileWriter fw = new FileWriter(file.getAbsoluteFile());

                        fw.append(connectingDevice.getName() + ":  " + readMessage);
                        fw.close();
                    }
                }
                catch (IOException e)
                {
                    e.printStackTrace();
                }

                break;

        }
        return false;
    }
});
1
0
48
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вместо того, чтобы использовать

FileWriter fw = new FileWriter(file.getAbsoluteFile());

использовать

FileWriter fw = new FileWriter(file.getAbsoluteFile(), true);

взглянем на второй конструктор класса FileWriter:

FileWriter(String fileName, boolean append)

Constructs a FileWriter object given a file name with a boolean indicating whether or not to append the data written.

Подробнее здесь: https://developer.android.com/reference/java/io/FileWriter#public-constructors

Спасибо, это работает, но почему-то первая строка не сохраняется. Есть идеи, почему это происходит?

Achal Sharma 05.08.2018 15:45

ОБНОВЛЕНИЕ: Иногда это происходит, иногда нет.

Achal Sharma 05.08.2018 15:52

Другие вопросы по теме