我有一个阵列,里面有足球队的人物。它包含诸如姓名,姓名和地址等信息。当我使用下面显示的代码时,文本文件包含如下值: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);
}
我做错了什么?
答案 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);