【问题标题】:Write to disk file incorrect写入磁盘文件不正确
【发布时间】:2011-03-11 00:54:17
【问题描述】:

我想将数组的值写入文件。

public void Write(String fileName) throws IOException
{

    PrintWriter outFile;
    outFile = new PrintWriter(new FileWriter(fileName));

    for(int K = 0 ; K < CurrentCount ; K++)
        outFile.println(List[K].toString());

    outFile.close();
}

输入文件的数据是:WeatherStation@1194a4e

WeatherStation 类具有我的构造函数以及 get 和 set 方法

 List[K] = new WeatherStation(Location, Temp, Title, Air, Pollen);

我希望将上面的所有属性都放入文件中。

【问题讨论】:

标签: java


【解决方案1】:

如果您期望这样,那么您需要为您的 WeatherStation 类覆盖 toString

默认是一个非常简单的输出类型和唯一 ID(不确定它是地址还是我头脑中的哈希)。

只需添加一个 toString 方法,该方法会遍历您的类(您想要打印的)的成员并将它们连接成一个字符串。

这个链接here 有一个很好的例子来说明如何做到这一点。你会做这样的事情:

@Override public String toString() {
    StringBuilder result = new StringBuilder();

    result.append (this.getClass().getName() + " {");
    result.append (" Location=[" + this.Location + "]");
    result.append (", Temp=[" + this.Temp + "]");
    // Other fields.
    result.append (", Pollen=[" + this.Pollen + "]");
    result.append (" }");

    return result.toString();
  }

它未经测试,可能不是您想要的确切格式,但它应该是一个好的开始。

【讨论】:

  • 我没有使用 .toString() 而只是列出了 outFile.println(List[K].GetLocation()); outFile.println(List[K].GetTemp());等等。对此有任何异议吗?
  • @5hits,只是在它不是真正的 OO 方式的情况下。不要误会我的意思,如果这对你有用,那就去吧。请记住,它解决了一个非常的问题。如果代码的其他部分需要字符串表示怎么办?如果你改变了类的内部结构,然后不得不去一百个不同的地方改变你的打印代码怎么办?使用 OO,对象应该理想地维护自己的数据代码,以便一切都本地化。我个人宁愿看到问题完全解决,但有时实用主义胜过纯洁:-)
【解决方案2】:

您需要在 WeatherStation 类中覆盖 toString() 以生成所需的输出。

【讨论】:

    【解决方案3】:

    简化您的生活!

    • a) 声明初始化没有问题。
    • b) 简化的 for 循环非常简单。
    • c) 如果您不向 println 传递原语或字符串,.toString () 将被自动调用。

    比较自己:

    public void Write(String fileName) throws IOException
    {
        PrintWriter outFile = new PrintWriter (new FileWriter (fileName));
        for (WheatherStation ws : List)
            outFile.println (ws);
        outFile.close();
    }
    

    还有 - 有没有人告诉你覆盖“toString”? ;) 我同意。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-01
      • 1970-01-01
      • 2012-09-02
      • 1970-01-01
      相关资源
      最近更新 更多