【问题标题】:File Handling: A new file is created even after using append文件处理:即使在使用 append 之后也会创建一个新文件
【发布时间】:2019-01-12 14:00:56
【问题描述】:

所以,我试图在我的内部存储中创建一个文件,但是下面的代码总是创建一个新文件,并且只在文件中存储最新的字符串。以下代码 (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;
    }
});

【问题讨论】:

    标签: android string bluetooth append file-handling


    【解决方案1】:

    而不是使用

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

    使用

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

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

    FileWriter(String fileName, boolean append)

    在给定文件名的情况下构造一个 FileWriter 对象,该文件名带有一个布尔值,指示是否 追加写入的数据。

    更多信息在这里:https://developer.android.com/reference/java/io/FileWriter#public-constructors

    【讨论】:

    • 谢谢,它确实有效,但不知何故第一个字符串没有被保存。知道为什么会这样吗?
    • 更新:有时会发生,有时不会。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    • 2021-05-01
    • 1970-01-01
    相关资源
    最近更新 更多