【问题标题】:Printing a new line in a file, in Java用Java在文件中打印新行
【发布时间】:2012-01-23 16:33:58
【问题描述】:

我的目标是为具有特定扩展名的所有文件建立索引并将其存储到 index.txt 中。我得到了所有正确的结果,但没有将“文件”放到新行中,这是我的代码的快照:

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" 吗?请告诉我应该怎么做。我想在每次退出 for 循环时插入一个新行。

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

【问题讨论】:

  • 谁能用我从同一个文件中得到的各种结果来解释这个异常?
  • 记事本只读取一种类型的行分隔符。这就是为什么,它似乎都在一条线上。
  • @Purushottam "谁能解释我从同一个文件中得到的各种结果的异常情况?" 请查看下面我的答案以获得关于换行的澄清/跨平台回车。

标签: java cross-platform newline carriage-return separator


【解决方案1】:

尝试写作:

System.getProperty("line.separator") 

而不是\n

【讨论】:

    【解决方案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]);   
    }
    

    【讨论】:

      【解决方案3】:

      您在 Java 中使用如此低级别的 I/O 有什么原因吗?首先,您应该使用 Writers 而不是 OutputStreams。

      然后,如果您使用 PrintWriter,您可以取消 getBytes 部分:

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

      后来……

      f0.print(ind[i]);

      最后是你的问题,在循环之外

      f0.println();

      【讨论】:

        【解决方案4】:

        这里缺少一个假设。

        1. 如果您假设您的文本文件应该有 MS Windows 行分隔符(适用于 Windows 平台),那么您应该使用 \r\n
        2. 如果您假设您的文本文件应该有 类 Unix 行分隔符(适用于 GNU/Linux、AIX、Xenix、Mac OS X、FreeBSD 等),那么您应该使用 @ 987654322@.
        3. 如果您假设您的文本文件应该有 Mac oldschool 行分隔符(意味着 Mac OS 最高版本 9、Apple II 系列、OS-9 等),那么您应该使用 @ 987654323@.
        4. 如果您假设您的文本文件应该具有您的程序 运行 平台类型的行分隔符,那么您应该使用 System.getProperty("line.separator")(或使用 @987654325 打印新行@)。

        【讨论】:

          【解决方案5】:

          试试这个,

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

          【讨论】:

          • 这显然只在类似 Windows 的平台上是正确的,在 Mac 或 *nix 上肯定不是你想要的......
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多