在Linux和Windows上编写Java文件时的额外新行

在Linux和Windows上编写Java文件时的额外新行,java,linux,windows,ubuntu,file-io,Java,Linux,Windows,Ubuntu,File Io,我有一个用Java编写的.txt文件,它有非常具体的新行安排。当我在Windows上编写文件时,这种安排是强制执行的,但是当我在Ubuntu上运行相同的代码时,每个应该有一行的地方都有两行新行。有人知道这可能是什么原因吗?这是我用来写的代码: List<String>toBeWrittenList = new ArrayList<String>(); for(int x=0; x < finalList.size(); x++){ toBeW

我有一个用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);
}
listtobewritenlist=newarraylist();
对于(int x=0;x
Windows使用一对“\r\n”字符来区分换行符,而Linux将“\n”视为换行符,并且看起来也是“\r”。因此“\r\n”更像是Linux中的两个换行符


将文本文件复制到Linux设备时,通过
dos2unix
运行文本文件,以将“\r\n”转换为“\n”。将文本文件复制回Windows时,通过unix2dos运行文本文件,将“\n”转换回“\r\n”对。

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


问题可能存在于Files.write中。你自己写这门课吗?或者您正在使用第三方库?

我不确定您所说的“复制”到Linux设备是什么意思-它是由.jar文件生成的。在这种情况下,我该如何将你的方法结合起来?哦,那你当初为什么不这么说呢?你能提供一份SSCCE吗?很好。由于这是您所说的可编译的,请修复。它是不可编译的。我不知道这个词是什么意思。我相信Files.write是Java的一部分:PrintWriter似乎完全忽略了换行符。对不起,我以为您在使用Java 6。从来没有机会使用Java7。如何使用PrintWriter?我通常这样写:for(字符串行:aLines)pw.println(行)。其中pw是PrintWriter对象。