我有一个多态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的每个子节点都有自己的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;
}
答案 0 :(得分:4)
在toString
方法中,您使用\n
作为行分隔符。但是如果你打开一个在不支持它们的程序中使用Unix行分隔符的文件(例如Windows上的记事本),文本将显示在一行上。
println
FileWriter
方法正确使用特定于平台的行分隔符,这就是为什么您的个人员工条目显示在单独的行中,而不是来自toString()
方法的员工详细信息,因为您在那里使用固定的\n
行分隔符。
因此,解决此问题的一种可能方法是使用toString
方法为您的平台使用正确的行分隔符(根据Julian Ladisch的建议使用System.lineSeparator()
)。
答案 1 :(得分:1)
而不是\ n使用java.lang.System.lineSeparator()。这样它就会在Windows平台上写\ r \ n。