Итак, я пытаюсь создать файл в моем внутреннем хранилище, но следующий код всегда создает новый файл и сохраняет только самую последнюю строку в файле. Часть следующего кода (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;
}
});
Вместо того, чтобы использовать
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
ОБНОВЛЕНИЕ: Иногда это происходит, иногда нет.
Спасибо, это работает, но почему-то первая строка не сохраняется. Есть идеи, почему это происходит?