未插入新行

时间:2011-05-24 08:04:08

标签: java file-io file

这是片段:

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);

我在当前目录中获得了名为f1.txtf2.txt的2个文件,但我希望127.0.0.1 www.bing.com位于f2.txt的新行中,但它出现在同一行(即文件与f1.txt相同)。

当我在String构造函数中插入换行符时,为什么不在f2.txt中获取新行?

4 个答案:

答案 0 :(得分:5)

不要对新行使用\n或类似的东西 - 这取决于平台。

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

答案 1 :(得分: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),您仍然会获得相同的输出,但您使用的工具看起来在该文件(或处理它)可能无法按预期工作。如果您将\n替换为\r\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");

答案 2 :(得分:2)

尝试找出分隔符应该是什么。例如,您可以尝试\r\n。它在Linux和Windows之间有所不同,哪些字符用于“新行”(换行和回车)

(回车意味着光标转到第一个字符,换行意味着光标“向下一行”。根据您的操作系统的作用,您需要一个或两个)

答案 3 :(得分:0)

在fileoutputstream上使用Printstream:

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();

REF: How do I write a newline using FileOutputStream