【问题标题】:Java buffered writer wont write all dataJava缓冲写入器不会写入所有数据
【发布时间】:2012-01-06 19:49:51
【问题描述】:
public static void save() 
{
    BufferedWriter out = null;
    try 
    {
        out = new BufferedWriter(new OutputStreamWriter(Gdx.files.external(file).write(false)));
        out.write(Double.toString(FinanceSystem.currentPlayerCash));
        out.write("\n");
        out.write(Integer.toString(DateSystem.day));
        out.write("\n");
        out.write(Integer.toString(DateSystem.month));
        out.write("\n");
        out.write(Integer.toString(DateSystem.year));
        out.write("\n");
        for(int i = 0; i <= InventorySystem.drugsOwned.size(); i++)
            out.write(Integer.toString(InventorySystem.drugsOwned.get(i))+"\n");
        for(int i = 0; i <= AttributeSystem.attributeNames.length; i++)
            out.write(Integer.toString(AttributeSystem.attributeValues.get(i)) + "\n");



    } 
    catch (Throwable e) {} 
    finally 
    {
       try
       {
          if (out != null)
               out.close();
       } 
       catch (IOException e) {}
    }

我的问题是,在库存 system.drugsowned 的 for 循环之后,没有其他内容被写入文件。所以在这个例子中 AttributeSystem.attributeValues 没有被写入。我也尝试过在这个循环之后写其他东西,包括非循环的东西,他们也没有写。华文?

【问题讨论】:

  • 也许它抛出了一个异常,你完全忽略了它,就好像它没有发生一样?不要那样做...
  • 您应该在异常块中添加一些日志记录。可能在编写属性之前/期间抛出了一些异常。
  • 空捕获块!一切谜团之母!

标签: java for-loop bufferedwriter


【解决方案1】:

这就是问题所在:

for(int i = 0; i <= InventorySystem.drugsOwned.size(); i++)
    out.write(Integer.toString(InventorySystem.drugsOwned.get(i))+"\n");

&lt;= 应该是 &lt;。因此,如果集合中有 5 个项目,则您要求元素 5,即 6th 元素,因为索引是从 0 开始的。这将引发异常。

然后被这个掩盖了:

catch (Throwable e)
{
}

就诊断而言,您在这里完全是一头雾水:

  • 除非您真的可以处理异常,否则不要捕获它 - 或者捕获它然后在记录(或其他)后重新抛出它
  • 尽可能捕捉特定异常。 (捕捉Exception 很糟糕;捕捉Throwable 更糟糕。)
  • 默默地捕捉甚至不记录是个糟糕的主意。这意味着您不知道您遇到问题的频率或问题是什么。

(此外,代码表明您要么过度使用静态变量,要么需要整理命名约定。不过那是另一回事。)

【讨论】:

  • “你完全把自己弄脏了”是对的。空的 catch 块几乎总是不正确的。
  • 感谢您快速而有用的回复。老实说,我对 try/catch 块的工作方式只有一个模糊的概念,所以我会采纳你的建议并重新编写它。我应该完全删除 try/catch 吗?
  • @Jon。您可以在第一个项目符号中修改语言吗?我认为您的意思是“不要抓住它-重新扔掉它”。否则,3 行非常好的异常处理教程:)。
  • 还有静态变量的东西,我正在使用这些负载,使用它们有什么问题?
  • @andy07070:它们基本上是全局变量,导致面向对象性差、可测试性差、并发噩梦等......
猜你喜欢
  • 2012-01-25
  • 2019-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-10
  • 1970-01-01
  • 1970-01-01
  • 2017-04-29
相关资源
最近更新 更多