文件处理:即使使用附加后,也会创建一个新文件

时间:2018-08-05 10:45:50

标签: android string bluetooth append file-handling

因此,我试图在内部存储器中创建一个文件,但是以下代码始终创建一个新文件,并且仅将最新的字符串存储在该文件中。以下代码的一部分(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 :(得分:0)

代替使用

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

使用

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

看看FileWriter类的第二个构造函数:

  

FileWriter(字符串fileName,布尔值附加)

     

使用给定文件名的布尔值构造FileWriter对象,该布尔值指示是否   附加写入的数据。

此处有更多信息:https://developer.android.com/reference/java/io/FileWriter#public-constructors