Java 如何逐行复制文件并保留其原始换行符

Java 如何逐行复制文件并保留其原始换行符,java,file-io,copy,newline,Java,File Io,Copy,Newline,我需要替换各种文件中的键(所有类型和换行格式)。 为此,我尝试逐行复制文件并替换行中的键。此操作有效,但原始换行符丢失 以下是我的代码,非常常见: FileInputStream fis = new FileInputStream(file); BufferedReader reader = new BufferedReader(new InputStreamReader(fis)); FileWriter writer = new FileWriter(tmpFile); BufferedW

我需要替换各种文件中的键(所有类型和换行格式)。 为此,我尝试逐行复制文件并替换行中的键。此操作有效,但原始换行符丢失

以下是我的代码,非常常见:

FileInputStream fis = new FileInputStream(file);
BufferedReader reader = new BufferedReader(new InputStreamReader(fis));

FileWriter writer = new FileWriter(tmpFile);
BufferedWriter out = new BufferedWriter(writer);

String line;
while ((line = reader.readLine() != null) {
    String updatedLine = replaceKeys(line);
    out.write(updatedLine);
    out.newLine();
}
我需要逐行读取文件才能正确替换键(键由一些分隔符确定,在文件读取期间不得剪切)

问题是我的unix文件(.sh)在替换后有错误的换行符(代码在windows上运行)。只有一行的文件将更改为两行文件

问题是,在逐行复制文件时,如何保持原始文件的换行符,或者,至少,如何能够确定文件的结尾而不在末尾添加额外的行?谢谢你的帮助

编辑:删除无用的DataInputStream。

您可以为此作业使用:

try(Scanner s=new Scanner(file).useDelimiter("(?<=\n)|(?!\n)(?<=\r)");
    FileWriter out=new FileWriter(tmpFile)) {

    while(s.hasNext()){
        String line=s.next();
        String updatedLine = replaceKeys(line);
        out.write(updatedLine);
    }
}

try(Scanner s=新的扫描仪(文件)。使用分隔符(“(“
DataInputStream
”的用途是什么?你为什么不直接将
FileInputStream
传递给
InputStreamReader
?很好,谢谢你的提示。这是一个糟糕的复制粘贴。没有DataInputStream它工作得很好。它就像一个符咒一样工作!我在这一个上被阻止了。因为我在谷歌上找不到一个好的方法,这是一个我也可以帮助别人。非常感谢你的帮助。