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

时间:2014-11-23 00:37:32

标签: java file-io

我有一个多态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;
}

2 个答案:

答案 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。