如何在文本文件中写入我的数组的内容?

时间:2015-04-08 22:19:30

标签: java arrays

我有一个阵列,里面有足球队的人物。它包含诸如姓名,姓名和地址等信息。当我使用下面显示的代码时,文本文件包含如下值:member @ 29086037

代码如下所示:

try
{
    PrintWriter pr = new PrintWriter ("memberDetails.txt");
    for (int i = 0; i < collection.length; i++)
    {
    pr.println(collection[i]); 
    }
    pr.close();
} catch (FileNotFoundException ex)
{
    System.out.println(ex.getMessage());
    System.out.println("in" + System.getProperty("user.dir"));
    System.exit(1);
}

我做错了什么?

4 个答案:

答案 0 :(得分:3)

当你看到那个带有数字和类名的malarky时,这意味着你无法覆盖toString()方法,因此它默认为Object.toString()

因此,覆盖public String toString()课程上的member方法。

答案 1 :(得分:1)

当您执行pr.println(collection[i]);而没有覆盖它时,默认情况下以这种方式打印Object::toString代表对象:

  

类Object的toString方法返回一个字符串,该字符串由对象为实例的类的名称,符号字符“@”和对象的哈希码的无符号十六进制表示组成。换句话说,此方法返回一个等于值的字符串:

 getClass().getName() + '@' + Integer.toHexString(hashCode())

要打印每个字段,请使用对象的属性,例如:

collection[i].getName(); 
collection[i].getAddress(); 

其他选项,是member的{​​{3}}方法。

答案 2 :(得分:0)

您必须正确提供文件的路径。我建议创建一个文件对象,然后将其传递给Printwriter。这样,您还可以在将文件分配给printwriter之前确定文件是否存在。

答案 3 :(得分:0)

正如其他人所指出的,假设你有一个为玩家建模的类,你应该在课堂上提供toString()实现。例如:

public class Player {
    private String firstName;
    private String lastName;
    private String address;
    ...
    @Override
    public String toString() {
        return String.format("Name: %s, %s. Address: %s", lastName, firstName, address);
    }
}

在完成之后,将播放器信息写入文件变得微不足道。使用Google的Guava等实用程序库,该解决方案简化为一行:

Files.write(Joiner.on(StandardSystemProperty.LINE_SEPARATOR.value())
                  .join(collection),
            new File("memberDetails.txt"),
            Charsets.UTF_8);