Java FileOutputStream仅当我在两次保存之间读取消息时才将其写入文件

Java FileOutputStream仅当我在两次保存之间读取消息时才将其写入文件,java,android,bufferedreader,fileoutputstream,Java,Android,Bufferedreader,Fileoutputstream,我正在尝试编写一个文件读/写类,为此我做了一个示例活动,其中有一个保存到我创建的文件的按钮,一个从文件读取的按钮,以及一个从中读取内容的文本视图。我尝试了几个测试用例,看看我的FileRW是否工作,如果我在每条消息之后读取文件,效果会很好,但是如果我尝试在连续两次尝试之间不读取多条消息而将多条消息保存到文件中,则只会将最新的消息写入文件。我不知道是什么导致了这种行为 感谢所有的帮助 file = new File(getFilesDir() + "CheckFile.txt"); save.s

我正在尝试编写一个文件读/写类,为此我做了一个示例活动,其中有一个保存到我创建的文件的按钮,一个从文件读取的按钮,以及一个从中读取内容的文本视图。我尝试了几个测试用例,看看我的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();
        }
    }
});
使用


如果希望附加到文件的末尾而不是写入文件的开头,默认情况下,FileOutputStream将在写入时覆盖输出文件的内容。通过将构造函数的第二个参数传递为
true
,可以告诉FileOutputStream附加到文件的现有内容,而不是覆盖

FileOutputStream fos = new FileOutputStream(file, true);

顶部:您有一些潜在的资源泄漏问题。您必须在finally块中关闭reader/stream,不要忘记这一点。或者使用try with resource(在java7+的情况下),那么文本在我读取之前不会被添加到文件中?每当我要求时,它都会重写未写的更改?@RanaiSrivastav基本上,首先打开FileOutputStream,向其中写入一些信息,然后关闭它。下次再来时,您再次打开了FileOutputStream。但是,它没有设置为append,因此它没有添加到文件的现有内容,而是重写了文件中的所有内容。这就是为什么你的文件只有最新的消息-其他消息被覆盖。
FileOutputStream fos = new FileOutputStream(file, true);