2014-11-23 2 views
1

그 HashSet의 각 객체의 toString()을 파일에 쓰고 자하는 다형성의 HashSet을 파일에 인쇄합니다. 콘솔. 파일에 모든 것을 쓸 수 있지만 각 개체는 한 줄에 인쇄됩니다. toString()이 형식화 된 방식으로 각 객체를 인쇄하고 싶습니다 (새 행에 인쇄 된 모든 필드).toString()을 Java로 깔끔하게 포맷 된 파일로 작성하십시오.

도움을 주시면 감사하겠습니다. 나는 사물의 무리를 시도했다, 그러나 이것은 내가 현재 나의 방법에 대해 무엇을 가지고 :

여기
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(); 
    } 
} 

는 직원 toString()입니다 - 직원의 모든 아이들이 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

try 블록의 for 루프 안에 여분의 세미콜론이 있습니다. 오타 믿지? – ha9u63ar

+1

'toString()'메소드의 구현을 보여줄 수 있습니까? – Dev

+0

hagubear - 네, 오타였습니다. – user2827811

답변

1

대신 \ n은 java.lang.System.lineSeparator()를 사용하십시오. 그렇게하면 Windows 플랫폼에서 \ r \ n을 씁니다.

4

toString 방법에서 줄 구분 기호로 \n을 사용하고 있습니다. 그러나 그들을 지원하지 않는 프로그램 (예 : Windows의 Notepad)에서 Unix 줄 구분 기호를 사용하는 파일을 열면 텍스트가 한 줄로 표시됩니다.

FileWriterprintln 방법은 올바르게 개별 직원 항목이 toString() 방법에서 직원의 세부 사항을 별도의 행에 표시하지만 왜이 \n 행 분리를 고정 사용하고 있기 때문에, 인, 플랫폼 별 라인 분리를 사용합니다.

그래서이 문제에 대한 하나 개의 가능한 솔루션은 toString 방법 (줄리안 Ladisch에 의해 제안 System.lineSeparator()를 사용)에 플랫폼에 대한 올바른 라인 분리를 사용하고 있습니다.

+0

그 설명을 주셔서 감사합니다, 나는 System.lineSeparator()를 사용해 보겠습니다. PrintWriter를 사용하여 각 필드를 인쇄하는 방법을 생각했지만 다른 직원이 가지고있는 고유 한 필드를 고려해야합니다. 그러면 다형성의 목적을 무효화 할 수 있습니다. – user2827811

+0

아 그래, 나는 당신이 당신의 질문에 다형성을 언급했음을 완전히 잊어 버렸다. 결코 생각하지 마라. 나는 그 부분을 나의 대답에서 편집 할 것이다. –

+0

그래서 모든 toString() 메소드를 java.lang.System.lineSeparator()를 구현하기 위해 변경했습니다. \ t와 비슷한 것을 할 수있는 방법이 있습니까? 내가 묻는 이유는이 Employee 데이터가 GUI의 JTextArea에 표시되고 GUI의 탭 간격이 파일의 간격과 다르게 나타납니다. – user2827811

관련 문제