【问题标题】:FileReader (probably) doing crazy stuff after calling a 2nd timeFileReader(可能)在第二次调用后做疯狂的事情
【发布时间】:2016-07-05 14:44:50
【问题描述】:

我的应用程序正在将数据写入 txt 文件。 (代码前段时间在这里有另一个原因)

我总是将整个文件读入一个字符串数组并替换一个明确的行。

阅读文件后,我记录数据以观察它。我的主要是调用应用程序 7 次(每行),但在第一次调用后,数据即时记录只是奇怪的。

这是我的代码:

 public void writeFileData(String data, int line) {

    String[] lines = new String[999];
    File file = null;
    BufferedReader br = null;
    FileOutputStream fos = null;
    OutputStreamWriter os = null;

    try {


        file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "data.txt");

        if(!file.exists())
        {
            try
            {
                if(file.createNewFile())
                {
                    Toast.makeText(BaseActivity.this, "File was created", Toast.LENGTH_LONG).show();
                }
            }
            catch(Exception ex)
            {
                Log.e("Error creating file", ex.getMessage());
            }
        }

        br = new BufferedReader(new FileReader(file));

        int i = 0;
        while(i < 7)
        {
            buffer = br.readLine();

            lines[i] = buffer;
            i++;
        }

        br.close();

        fos = new FileOutputStream(file, false);

        lines[line] = data;

        for(i = 0; i < 7; i++)
        {
            if (lines[i].isEmpty())
            {
                Log.e(TAG, i + "is empty");
            }
            else
            {
                Log.e(TAG, lines[i]);
            }
        }

        for(i = 0; i < 7; i++)
        {
            try {
                fos.write(lines[0].getBytes());
            }
            catch (Exception ex)
            {
                Log.e("Error writing", ex.getMessage());
            }
        }

        try
        {
            fos.close();
        }
        catch(Exception ex)
        {
            Log.e("Error closing/flushing", ex.getMessage());
        }
    }
    catch(Exception ex)
    {
        Log.e("Error creating streams", ex.getMessage());
    }

}

My logcat

main 中的调用如下所示:

    writeFullData();           
    writeFileData("001",0);
    writeFileData("002",1);
    writeFileData("110",2);
    writeFileData("110",3);
    writeFileData("110",4);
    writeFileData("110",5);
    writeFileData("110",6);

writeFullData(); 正在写入 txt 文件(在 logcat 图像中可见)

提前致谢。

泽维尔·赛林格

【问题讨论】:

  • 你能发布你的txt数据吗?
  • 它是空的,但正如我们在 logcat 中看到的那样,它肯定不是在阅读时。这就像我将 null 写入文件
  • 在这种情况下,我猜它阅读的内容比你实际拥有的更多,将 for 更改为 4,检查它打印的内容,然后更改为 5,依此类推。
  • 是的,可能是这样,我会尝试并编辑以防它无法正常工作。谢谢
  • 好的,我想我知道是什么问题。在第二次通话后阅读时,我的阅读器不是从第 1 行开始。我该如何改变呢?

标签: android file filereader filewriter


【解决方案1】:

我调用了一个覆盖整个文件的函数。这样我就能够监视每一行并记录输入,因此我会注意到行的变化,并且我的 writeFileData() 函数也必须读取一些内容。 我没有在 FileWriter 中写 false!

BufferedWriter bw = new BufferedWriter(new FileWriter(file, true));

我在文件中写入了 21 行而不是 7 行(调用 4 次后)。

第二个错误是我忘记了 writeFileData 中的 bw.newLine。

那些错误确实...

但感谢您的帮助。

【讨论】:

    猜你喜欢
    • 2013-05-10
    • 2017-07-06
    • 2019-01-23
    • 2013-03-04
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    • 2020-05-24
    • 1970-01-01
    相关资源
    最近更新 更多