2012-12-19 119 views
3

一個單獨的行所以當我用FileOutputSstream寫我的文本文件我都用了如何寫一個文本文件

fos.write(("0"+"\n").getBytes()); 

fos.write(System.getProperty("line.separator").getBytes()); 

和他們都沒有工作...他們仍然打印在同一條線上...

有什麼想法?

+3

你怎麼「看」,「他們仍然打印在同一行」? – assylias

+2

我強烈懷疑你寫的是否正確,然後試圖用一個認爲換行符看起來像'\ r \ n'而不是簡單的'\ n'的程序來查看它 – tucuxi

+0

我通過將手機掛上我的電腦,並找到該文件,它都在同一行...和tucuxi可以詳細說明嗎? –

回答

1

使用PrintStream

System.out是一個PrintStream例如。

你說你有一個FileOutputStream。然後,

FileOutputStream f = new FileOutputStream("test.txt"); 
PrintStream ps = new PrintStream(f); 
ps.print("line1"); 
ps.println(); //this writes your new line 
ps.print("line2"); 
ps.close(); 

也可以使用;

BufferedWriter fos = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filename))); 
     fos.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); 
     fos.newLine(); 
-1

你必須像這樣追加行分隔符/ break。

嘗試

String separator = System.getProperty("line.separator"); 
    fos.append(seperator); 
0

使用此:

public byte[] newLine() { 
    byte[] temp = new byte[2]; 
    temp[0] = 13; 
    temp[1] = 10; 
    return temp; 
} 

只要寫這對您的FileOuputStream。 像這樣:

FileOutputStream.write(newLine()); 

這將簡單地寫的字節數:13和10。

+0

也被稱爲「windows換行符」 – tucuxi

1

換行符在每個平臺不同。對於unix系統(MacOS X,Linux,...和Android,由於它使用修改的Linux內核),行分隔符是0x0A;對於MS Windows,它有兩個字節長:0x0D,0x0A;對於老派的MacOS,它是0x0D

這意味着當由一個特別愚蠢的Windows程序(如Notepad.exe)打開時,由Android編寫的Android-newline將不可見。更聰明的程序(例如編程編輯器或IDE)將毫無麻煩地顯示它。

+0

另請注意,某些協議期望行分隔符爲0x0d,0x0a樣式 - 例如,HTTP – tucuxi

+0

這不是我的問題......當我把東西放進去的時候,通過行到一個字符串數組我只有一個值...你有任何想法如何解決這個問題?因爲我不認爲它只是因爲記事本... –

+0

什麼字節被寫入文件?你是否在Windows下使用Java讀取它們,其中新行可能默認爲0x0D,0x0A?請使用文件相關位的十六進制轉儲更新您的問題。 – tucuxi

2

好的,所以我想通了......由於某種原因,當我嘗試每個例子在這裏唯一的工作是ps.print(「one \ r \ n」); 它真的很奇怪,因爲我有知道知道爲什麼它的工作原理,但它確實...

+0

「one」並不意味着什麼......我只是把它放在那裏「\ r \ n」是它的瘋狂! –

+0

「\ r \ n」是0x0d,0x0a - 這意味着,無論您在哪裏閱讀這些文件,您都期待Windows換行,而不是您正在編寫的unixy。 – tucuxi

1

可以使用的println方法

PrintStream ps=new PrintStream(new FileOutputStream("outputPath")); 
for(String line:lines) 
    ps.println(line);