gpt4 book ai didi

java - 将对象 toString() 写入文件,在 Java 中整齐地格式化

转载 作者:行者123 更新时间:2023-11-29 07:44:32 28 4
gpt4 key购买 nike

我有一个多态 HashSet,我想将该 HashSet 中每个对象的 toString() 写入一个文件,以便在打印到控制台时按照它的外观进行格式化。我可以将所有内容写入文件,但每个对象都打印在一行上。我想让每个对象都按照 toString() 的格式化方式打印(每个字段打印在一个新行上)。

如有任何帮助,我们将不胜感激。我已经尝试了很多东西,但这是我目前的方法:

public void employeeWriter(String fileName, HashSet<Employee> employees)
{
try
{
PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(fileName, false)));

for (Employee e : employees)
{
pw.println(e);
}
pw.close();
}
catch (IOException e)
{
System.err.println("Error writing to file in employeeWriter()");
e.printStackTrace();
}
}

这是 Employee toString() - Employee 的每个 child 都有自己的 toString() 方法,该方法打印此 toString() 及其自己的唯一字段。

@Override
public String toString()
{
String output = "\n\t--Employee--" + "\nName:" + "\t\t" + getName()
+ "\nTitle:" + "\t\t" + this.getClass().getSimpleName()
+ "\nID: " + "\t\t" + getId() + "\nHire Year:" + "\t\t"
+ getHireYear() + "\nTax Rate:" + "\t\t"
+ percentFormatter.format(getTaxRate()) + "\nPay Before Taxes:"
+ "\t" + formatter.format(getWeeklySalaryBeforeTaxes())
+ "\nPay After Taxes:" + "\t"
+ formatter.format(getWeeklySalaryAfterTaxes())
+ "\nWeekly Taxes:" + "\t\t"
+ formatter.format(getWeeklyTaxes());

return output;
}

最佳答案

toString 方法中,您使用 \n 作为行分隔符。但是,如果您在不支持 Unix 行分隔符的程序(例如 Windows 上的记事本)中打开一个使用 Unix 行分隔符的文件,文本将显示为在一行上。

FileWriterprintln 方法正确使用特定于平台的行分隔符,这就是为什么您的个人员工条目出现在单独的行上,而不是来自 的员工详细信息toString() 方法,因为您在那里使用固定的 \n 行分隔符。

因此,此问题的一种可能解决方案是在 toString 方法中为您的平台使用正确的行分隔符(按照 Julian Ladisch 的建议使用 System.lineSeparator())。

关于java - 将对象 toString() 写入文件,在 Java 中整齐地格式化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27084225/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com