У меня есть полиморфный HashSet, который я хочу записать toString() каждого объекта в этом HashSet в файл, так что он отформатирован так, как он выглядит при печати на консоли. Я могу написать все в файл, но каждый объект печатается на одной строке. Я хотел бы, чтобы каждый объект печатался так, как форматируется 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;
}
В методе toString
вы используете \n
как разделители строк. Но если вы откроете файл, который использует разделители строк Unix в программе, которая их не поддерживает (например, "Блокнот в Windows"), текст будет отображаться в одной строке.
Метод println
FileWriter
корректно использует разделители строк для конкретной платформы, поэтому ваши отдельные записи сотрудников отображаются в отдельных строках, но не детали сотрудников из метода toString()
, потому что вы используете фиксированный разделитель строк \n
.
Таким образом, одним из возможных решений этой проблемы является использование правильных разделителей строк для вашей платформы в методе toString
(используйте System.lineSeparator()
как это предлагает Джулиан Ладиш).
Вместо \n используйте java.lang.System.lineSeparator(). Таким образом, он пишет \r\n на платформах Windows.
toString()
, пожалуйста?