2011-05-24 20 views
1

這是片段:新線沒有插

String s1=new String("127.0.0.1 www.google.com127.0.0.1 www.bing.com"); 
String s2=new String("127.0.0.1 www.google.com" + "\n" + "127.0.0.1 www.bing.com"); 
byte buffer1[]=s1.getBytes(); 
byte buffer2[]=s2.getBytes(); 
FileOutputStream fos=new FileOutputStream("f1.txt"); 
for(int i=0;i<buffer1.length;i++) 
fos.write(buffer1[i]); 
FileOutputStream fos2=new FileOutputStream("f2.txt"); 
for(int i=0;i<buffer2.length;i++) 
fos2.write(buffer2[i]); 
System.out.println("size of buffer1 = "+buffer1.length); 
System.out.println("\nsize of buffer2 = "+buffer2.length); 
String x=new String("s"+"\n"+"u"); 
System.out.println(x); 

我得到2個文件在我的當前目錄中名爲f1.txtf2.txt,但我期待有一個127.0.0.1 www.bing.com是在f2.txt新的生產線,但它的出現同一行(即該文件與f1.txt相同)。

當我在String構造函數中插入一個新的行字符時,爲什麼我不在f2.txt中獲得新行?

+0

你是什麼操作系統?它使用什麼樣的線路分隔符? \ r \ l? – Hubert 2011-05-24 08:10:29

+0

@ Hubert win7.I在Windows 7上使用'\ n' – 2011-05-24 08:13:12

回答

5

不要使用\n或類似的東西換行 - 這是平臺相關的。

使用System.getProperty("line.separator")

+0

@ Bozho'\ n'對'String x = new String(「s」+「\ n」+ 「U」); System.out.println(x);'那麼爲什麼不在文件寫入過程中。 – 2011-05-24 08:25:41

2

我不確定你在哪個平臺上運行,但在Ubuntu上的Eclipse Galileo下,它的工作方式與預期完全一致。

代碼:

import java.io.FileOutputStream; 
public class Find { 
    public static void main(String args[]) { 
     try { 
      String s1=new String("127.0.0.1 www.google.com127.0.0.1 www.bing.com"); 
      String s2=new String("127.0.0.1 www.google.com" + "\n" + 
       "127.0.0.1 www.bing.com"); 

      byte buffer1[]=s1.getBytes(); 
      byte buffer2[]=s2.getBytes(); 

      FileOutputStream fos=new FileOutputStream("f1.txt"); 
      for(int i=0;i<buffer1.length;i++) 
       fos.write(buffer1[i]); 

      FileOutputStream fos2=new FileOutputStream("f2.txt"); 
      for(int i=0;i<buffer2.length;i++) 
       fos2.write(buffer2[i]); 

      System.out.println("size of buffer1 = "+buffer1.length); 
      System.out.println("size of buffer2 = "+buffer2.length); 

      String x=new String("s"+"\n"+"u"); 
      System.out.println(x); 
     } catch (Exception e) {} 
    } 
} 

輸出:

size of buffer1 = 46 
size of buffer2 = 47 
s 
u 

和這兩個文件是不同的:

f1.txt: 
    127.0.0.1 www.google.com127.0.0.1 www.bing.com 
f2.txt: 
    127.0.0.1 www.google.com 
    127.0.0.1 www.bing.com 

如果您使用的操作系統不使用\n作爲行分隔符(例如Windows),您仍然可以獲得相同的輸出,但工具你使用看看那個文件(或者它的進程)可能無法按預期工作。如果您用\r\n代替了\n,那麼您可能會發現其他工具在Windows上運行良好。

但是,對於便攜性,使用line.separator屬性,而不是\n(或\r\n)直接:

String s2=new String("127.0.0.1 www.google.com" + 
    System.getProperty("line.separator") + 
    "127.0.0.1 www.bing.com"); 
+0

和eclipse helios – 2011-05-24 08:13:22

+0

@ paxdiablo win7 – 2011-05-24 08:13:38

+0

關鍵是,正如@Bozho所說,解決方案是依賴於平臺的 - 所以它可以爲你的_some_工作。 – Mikaveli 2011-05-24 08:18:56

1

試圖找出分隔應該是什麼。例如,您可以嘗試\r\n。它不同於Linux和Windows之間用於「換行」的字符(換行和回車)

(回車意味着光標移到第一個字符處,換行意味着光標變爲「1 line down「。根據你的操作系統的不同,你需要一個或兩個)

+0

'/ n'在我的操作系統上一直工作正常。在文件寫入過程中/ n是不是工作,當它顯示的輸出長度分別是46,47時 – 2011-05-24 08:39:43

0

使用的PrintStream在FileOutputStream中:

FileOutputStream f = new FileOutputStream("f2.txt"); 
PrintStream ps = new PrintStream(f); 
ps.print("127.0.0.1 www.google.com"); 
ps.println(); //this writes your new line 
ps.print("127.0.0.1 www.bing.com"); 
ps.close(); 

裁判: How do I write a newline using FileOutputStream