在Java中向文件打印新行

3

我打算制作一个包含特定扩展名的所有文件的索引,并将其存储到index.txt中。我得到了所有正确的结果,但是没有将“files”放到新行上,这是我的代码快照:

OutputStream f0 = new FileOutputStream("index.txt");
    String ind[] = f.list(only); // logic for getting only relevant files
        for(int i=0;i<ind.length;i++)
        {
            File n = new File(path + "/" +ind[i]);
                System.out.println(ind[i]+ " is a " +exten +" file");
                ind[i]+="\n";           // doesnt work      
                f0.write(ind[i].getBytes());    // here i am writing the filenames                              
        }           

是因为getBytes()函数忽略了“/n”导致的吗?请告诉我该怎么做。我想在每次退出循环时插入一个新行。

一个主要的编辑:当我用notepad++或wordpad打开文件时,我得到了想要的结果,但是当我用记事本打开文件时,结果都在同一行上。请解释一下!


有人能解释一下为什么我得到的同一个文件的结果不同吗? - Purushottam
1
记事本只能读取一种类型的行分隔符。这就是为什么它看起来像是一行中的所有内容。 - Esselans
@Purushottam "有人能解释一下我得到的同一个文件的各种结果的异常情况吗?" 请查看下面我的答案,以了解跨平台的换行符/回车符的澄清。 - Unai Vivi
5个回答

5

尝试编写:

System.getProperty("line.separator") 

代替 \n


2

你为什么要在Java中使用如此低级的I/O?首先,你应该使用Writer而不是OutputStreams。

然后,如果你使用PrintWriter,就可以省去getBytes这一步骤:

PrintWriter f0 = new PrintWriter(new FileWriter("index.txt"));

稍后再写入内容...

f0.print(ind[i]);

最后,在循环外部简单地执行:

f0.println();


2
这里缺少一个前提假设。
  1. 如果您假定您的文本文件应该有 MS Windows 行分隔符(适用于Windows平台),则应使用 \r\n
  2. 如果您假定您的文本文件应该有 类Unix 行分隔符(适用于GNU/Linux、AIX、Xenix、Mac OS X、FreeBSD等系统),则应使用 \n
  3. 如果您假定您的文本文件应该有 Mac oldschool 行分隔符(适用于Mac OS版本9及以下、Apple II系列、OS-9等系统),则应使用 \r
  4. 如果您假定您的文本文件应该具有与程序所在平台相同类型的行分隔符,则应使用 System.getProperty("line.separator")(或使用 .println() 打印新行)。

2

不要使用FileOutputStream,而应该使用PrintWriter。

PrintWriter out = new PrintWriter("index.txt");
String ind[] = f.list(only); // logic for getting only relevant files
for(int i=0;i<ind.length;i++)
{
    File n = new File(path + "/" +ind[i]);
    System.out.println(ind[i]+ " is a " +exten +" file");
    out.println(ind[i]);   
}

1

试试这个,

FileWriter.write("\r\n");

这仅适用于类似于Windows的平台,显然在Mac或*nix上并不正确,也绝对不是您想要的。 - Voo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接