【问题标题】:Extra New Lines When Writing Java File on Linux vs Windows在 Linux 与 Windows 上编写 Java 文件时的额外新行
【发布时间】:2013-03-29 02:55:02
【问题描述】:

我有一个我正在使用 Java 编写的 .txt 文件,该文件具有非常具体的新行排列。当我在 Windows 上编写文件时,这种安排是强制执行的,但是当我在 Ubuntu 上运行相同的代码时,每个应该有的地方都有两个新行。有谁知道这可能是什么原因造成的?这是我用来编写的代码:

List<String>toBeWrittenList = new ArrayList<String>();
    for(int x=0; x < finalList.size(); x++){
        toBeWrittenList.add("\n");
        toBeWrittenList.add("==level " + (x+1) +"==");
        for(int y=0; y < finalList.get(x).size();y++){
            if(finalList.get(x).get(y).equals("N"))
                toBeWrittenList.add(y+1 + ". null");
            else
                toBeWrittenList.add(y+1 + ". " + finalList.get(x).get(y));
        }
    }
    try {
        writeSmallTextFile(toBeWrittenList, FILE_NAME3);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

static void writeSmallTextFile(List<String> aLines, String aFileName) throws IOException {
        Path path = Paths.get(aFileName);
        Files.write(path, aLines, ENCODING);
}

【问题讨论】:

    标签: java linux windows ubuntu file-io


    【解决方案1】:

    我通常使用 PrintWriter 方法 println 来创建一个文本文件。 println 将检查您的操作系统并选择正确的馈线(\n 或 \n\r)。

    Files.write 中可能存在问题。你是自己写的课吗?还是您在使用 3rd 方库?

    【讨论】:

    • 我相信 Files.write 是 Java 的一部分:docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html
    • PrintWriter 似乎完全忽略了换行符。
    • 对不起,我以为你在使用 java 6。从来没有机会使用 java 7。你如何使用 PrintWriter?我通常这样写:for (String line : aLines) pw.println(line)。其中 pw 是 PrintWriter 对象。
    【解决方案2】:

    Windows 使用“\r\n”对字符来区分换行符,而 Linux 将“\n”视为换行符,并且看似“\r”。因此 "\r\n" 在 Linux 中看起来更像是两个换行符。

    当您将文本文件复制到 Linux 机器时,通过 dos2unix 运行您的文本文件,以将“\r\n”转换为“\n”。当您将文本文件复制回 Windows 时,通过 unix2dos 运行您的文本文件,以将“\n”翻译回“\r\n”对。

    【讨论】:

    • 我不确定你所说的“复制”到 Linux 机器是什么意思——它是由 .jar 文件生成的。在这种情况下,我将如何整合您的方法?
    • 哦,那你一开始为什么不这么说呢?你能提供一个SSCCE吗?
    • 很好。既然这就是你所说的可编译,请修复the error messages that compiling your code produces
    • 不可编译。我不确定这个词是什么意思。
    猜你喜欢
    • 2020-10-19
    • 2015-04-19
    • 1970-01-01
    • 2011-07-18
    • 2020-07-19
    • 2018-01-27
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    相关资源
    最近更新 更多