2012-12-19 82 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);