2011-12-12 4 views
11

Apache POI 클래스를 사용하여 Outlook .MSG 파일을 텍스트 파일로 디코딩하려고합니다.Printwriter println : 새 줄을 만들지 않았습니다.

메서드가 PrintWriter 인 경우를 제외하면 모든 것이 올바르게 작동합니다. 새 라인을 만들지 않습니다.

그냥 모든 문장을 차례로 연결합니다. 내 지역의 바람둥이 소 instalation (Windows 시스템)에서 작동하지만, Solaris 플랫폼에 바람둥이 또는 웹 로직의 소 instalation에 실패 아래의 스 니펫 코드의 결과는 내가 여러 대의 컴퓨터에 코드를 시도

 
"De: textPara: " iso 
"De: " 
"Para: " 

입니다. 인코딩 알고리즘과 관련이 있다고 생각 했으므로 Printwriter 대신 PrintStream을 사용하여 인코딩 ISO-8859-1을 나타내었지만 행운도 아닙니다.

아이디어가 있으십니까? 다음

try { 
     byte [] msgByte = Base64.decodeBase64(msgBase64); 

     InputStream inputMsg = new ByteArrayInputStream(msgByte); 
     msg = new MAPIMessage(inputMsg); 

     /* 1. Transform MSG to TXT. */ 
     try { 
      txtOut = new PrintWriter(outputMsg); 
      try { 
       String displayFrom = msg.getDisplayFrom(); 
       txtOut.println("De: "+displayFrom); 
      } catch (ChunkNotFoundException e) { 
       _logger.info("Error extrayendo displayFrom: "+e); 
      } 
      try { 
       String displayTo = msg.getDisplayTo(); 
       txtOut.println("Para: "+displayTo); 
      } catch (ChunkNotFoundException e) { 
       _logger.info("Error extrayendo displayTo: "+e); 
      } 

     } finally { 
     if(txtOut != null) { 
      txtOut.close();} 
     else { 
      _logger.error("No se ha podido parsear el mensaje."); 
     } 

     } 
+2

인쇄 대상은 무엇입니까? 콘솔, 로그 파일, GUI 응용 프로그램의 텍스트 상자, html? – nos

+1

각 줄 사이에 한 줄을 추가하려고합니까? 당신이 줄을 쓸 때마다'txtOut.println()'을 시도해 보라. –

+0

실제로 출력되는 것 외에 예상되는 정확한 출력은 무엇입니까? – Peter

답변

21

변경이 :

txtOut.print("De: "+displayFrom + "\r\n"); 
txtOut.print("Para: "+displayTo + "\r\n"); 

이것은 PrintWriter.println()는 운영 체제의 따라 Line break를 생성하는 방법과 관련이 있습니다. 유닉스 시스템의 경우 LF (\ n), Windows의 경우 CR + LF (\ r \ n)입니다. I는 CR + LF 수단되는 "\ R \ n"을 첨가하여 인쇄 ()를 사용하는 방법

공지 대신에 println()의. 이렇게하면 생성 된 줄 바꿈은 플랫폼에 종속되지 않습니다.

클래스에 다음 메소드를 추가하여 중복을 피하고 txtOut.print()를 직접 호출하는 대신이 사용자 정의 println()을 호출 할 수도 있습니다.

private static final String LINE_SEPARATOR = "\r\n"; 

public void println(String str) { 
    txtOut.print(str + LINE_SEPARATOR); 
} 

그냥 에 println() 메서드를 호출 이쪽으로.

+7

"\ r \ n"에 태그를 지정하는 대신 더 안전한 방법은 다음과 같이 정의하고 사용할 수 있습니다. public static String newline = System.getProperty ("line.separator"); – BlueVoid

+0

println을 print + \ r \ n으로 변경하는 중 문제가 해결되었습니다. 고마워. – nicBBB

관련 문제