2011-12-12 27 views
11

Tôi đang cố gắng giải mã tệp .MSG triển vọng thành tệp văn bản, sử dụng các lớp Apache POI.Printwriter println: không có dòng mới được tạo

Mọi thứ hoạt động tốt, ngoại trừ phương thức println của PrintWriter: nó không tạo ra dòng mới.

Nó chỉ liên kết từng câu một cách trực tiếp. Kết quả của đoạn mã dưới đây là

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

Tôi đã thử các mã trên một số máy: nó hoạt động trên địa phương tomcat instalation (máy tính Windows) của tôi, nhưng không thành công trên một tomcat hoặc WebLogic instalation trên một nền tảng Solaris. Tôi nghĩ rằng nó đã có một cái gì đó để làm với các thuật toán mã hóa, vì vậy tôi sử dụng PrintStream thay cho Printwriter, chỉ ra mã hóa ISO-8859-1, nhưng không may mắn không.

Bất kỳ ý tưởng nào?

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

bạn đang in gì? Bàn điều khiển, tệp nhật ký, hộp văn bản trong ứng dụng GUI, html? – nos

+1

Bạn đang cố gắng thêm một dòng phụ giữa mỗi dòng. Hãy thử 'txtOut.println()' ngay sau mỗi lần bạn viết một dòng. –

+0

Đầu ra chính xác mà bạn đang mong đợi, bên cạnh những gì thực sự là đầu ra? – Peter

Trả lời

21

Thay đổi như sau:

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

này liên quan đến cách PrintWriter.println() tạo ra Line break phụ thuộc vào hệ điều hành. Đối với các hệ thống Unix là LF (\ n), cho Windows là CR + LF (\ r \ n).

Chú ý làm thế nào tôi thêm "\ r \ n" có nghĩa là CR + LF và sử dụng in() thay vì println(). Bằng cách này, ngắt dòng được tạo ra không phụ thuộc vào nền tảng.

Bạn cũng có thể thêm phương thức sau vào lớp của mình để tránh trùng lặp và chỉ cần gọi println tùy chỉnh này() thay vì gọi trực tiếp txtOut.print().

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

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

Bằng cách này bạn chỉ cần gọi println() phương pháp.

+7

Thay vì gắn thẻ vào "\ r \ n" một phương thức an toàn hơn có thể là để xác định và sử dụng: public static String newline = System.getProperty ("line.separator"); – BlueVoid

+0

Sự cố đã giải quyết việc thay đổi println thành bản in + \ r \ n. Cảm ơn rất nhiều. – nicBBB

Các vấn đề liên quan