2010-11-01 41 views
5

Tôi đang sử dụng hàm sau để viết chuỗi vào Tệp. Chuỗi được định dạng bằng ký tự dòng mới.Java: BufferedWriter bỏ qua dòng mới

Ví dụ, text = "sometext\nsomemoretext\nlastword";

tôi có thể nhìn thấy các nhân vật xuống dòng của tập tin đầu ra khi tôi làm:

type outputfile.txt 

Tuy nhiên, khi tôi mở văn bản trong notepad Tôi không thể nhìn thấy dòng mới. Mọi thứ xuất hiện trong một dòng.

Tại sao điều này xảy ra. Làm cách nào để đảm bảo rằng tôi viết văn bản đúng cách để có thể thấy chính xác (được định dạng) trong notepad.

private static void FlushText(String text, File file) 
    { 
     Writer writer = null; 
     try 
     {   
      writer = new BufferedWriter(new FileWriter(file)); 
      writer.write(text); 
     } 
     catch (FileNotFoundException e) 
     { 
      e.printStackTrace(); 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
     finally 
     { 
      try 
      { 
       if (writer != null) 
       { 
        writer.close(); 
       } 
      } 
      catch (IOException e) 
      { 
       e.printStackTrace(); 
      } 
     } 
    } 

Trả lời

10

Trên cửa sổ, mới dây chuyền được đại diện, theo quy ước, như một chiếc xe ngựa-trở lại theo sau là một dòng thức ăn chăn nuôi (CR + LF), ví dụ: \r\n.

Từ Newline wikipedia page:

soạn thảo văn bản thường được sử dụng cho chuyển đổi một tập tin văn bản giữa các định dạng xuống dòng khác nhau; biên tập viên hiện đại nhất có thể đọc và ghi các tệp bằng cách sử dụng ít nhất là các quy ước ASCII CR/LF khác nhau. Trình chỉnh sửa Windows chuẩn Notepad không phải là một trong số chúng (mặc dù Wordpad là).

Notepad sẽ hiển thị kết quả một cách chính xác nếu bạn thay đổi chuỗi:

text = "sometext\r\nsomemoretext\r\nlastword"; 

Nếu bạn muốn có một cách nền tảng độc lập đại diện cho một mới trực tuyến, sử dụng System.getProperty("line.separator"); Đối với trường hợp cụ thể của một BufferedWriter , đi với những gì bemace gợi ý.

+3

Oh. Bây giờ tôi đang sử dụng System.getProperty ("line.separator"); Không thể sử dụng BufferedWriter.newLine() vì tôi cần điền chuỗi hoàn chỉnh trước khi viết. – devnull

+0

Điều này đã lưu tôi. Tôi đang làm việc với Wicket, và BufferedWriter.newLine() làm việc tại địa phương, nhưng không phải trên tomcat .. Tôi đã thử \ r \ n và nó làm việc như một nét duyên dáng .. Cảm ơn! – eaglei22

7

Đây là lý do tại sao bạn nên sử dụng BufferedWriter.newLine() thay vì mã hóa cứng các dấu tách dòng của bạn. Nó sẽ chăm sóc chọn phiên bản chính xác cho bất kỳ nền tảng bạn đang làm việc trên.

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