【问题标题】:App writing to file应用程序写入文件
【发布时间】:2013-03-18 15:45:21
【问题描述】:

我有一个正在将数据写入文件的应用程序。我第一次运行它时,它运行良好并将 1000 个值写入文件。然后我使用此代码关闭应用程序

finish();
System.exit(0);

当我按下停止按钮时会发生这种情况。

当我在停止后再次运行它时,比如几分钟后,它只会在同一时间范围内将几个值写入新文件。

这是我用来写入文件的代码:

public void write(String message) {

    try {
        if (out == null) {
            FileWriter datawriter = new FileWriter(file, true);
            out = new BufferedWriter(datawriter);
            //out.write("X Value, Y Value, Z Value \n");
        }
        if (file.exists()) {
            out.append(message);
            out.flush();    
        }

任何关于为什么会发生这种情况的见解将不胜感激。

谢谢

【问题讨论】:

  • Android 支持FileWriter?为了尽快获得更好的帮助,请发帖SSCCE
  • 它在写什么价值观?他们来自哪里?你确定应该有数千个吗?
  • @AndrewThompson 它应该这样做,它会写入我期望的值并且在我需要它们的区域中
  • @iamnotmaynard 从手机中写入加速度计值
  • 你错过了关于SSCCE的部分吗?

标签: java android file


【解决方案1】:

完成后做out.close()。这可能是一个系统正在恶化。

【讨论】:

  • 而不是finish(); System.exit(0); ?
  • 不,以前。什么结局我不知道。
  • 不行,out.close需要一个类或者变量。我应该指出,我正在关闭另一个类中的应用程序,并且文件写入发生在另一个类中。
  • 然后使用out.close(); out = null; 而不是out.flush();。实际上最好删除条件if (file.exists()),否则打开的代码会抛出异常。
  • 它会抛出什么异常?它在第一次测试运行时没有抛出任何异常。需要刷新是因为它不断写入文件,关闭它会效率低下,因为它需要再次重新打开。
【解决方案2】:

不要打电话

System.exit(0);

阅读this post 了解原因。

此外,您不需要致电flush(),而只需在完成后致电close(),然后再致电finish()

试试这个代码:

public void write(String message) {
    try {
        if (out == null) {
            FileWriter datawriter = new FileWriter(file, true);
            out = new BufferedWriter(datawriter);
        }
        out.append(message);
        out.flush();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

【讨论】:

  • 我需要调用它来刷新缓冲区,至少这就是我认为需要的。当我关闭并且之前没有冲洗时,它正在崩溃。阅读那篇文章,我应该将其保留为 finish();
猜你喜欢
  • 2012-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-22
  • 2014-09-11
  • 2014-02-13
相关资源
最近更新 更多