我尝试复制带有一些必需参数的文件: inputEncoding , outputEncoding和outputLineSeparator 。
但是当我运行以下代码时,我的文件与CRLF最终字符不是很好的复制,这最后一个CRLF字符消失了。
我认为readLine在第3行后返回null,因为第4行是空的...
我的目标是找到可以严格复制以下两个文件的copyfile函数。
有没有办法复制这个最后的空行(最后一个换行符)?
在此先感谢您的帮助。
输入文件
文件testInEndNL.txt(显式字符)
A
B
C
文件testOutEndEOF.txt(显式字符)
A
B
C
输出文件
文件testOutEndNL.txt(显式字符) KO对我来说
A
B
C
文件testInEndEOF.txt(显式字符)对我来说没关系
A
B
C
码
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.nio.charset.Charset;
public class TestEncoding {
public static void main(String[] args) {
File src;
File dst;
Charset inputEncoding;
Charset outputEncoding;
String outputLineSeparator;
inputEncoding = Charset.defaultCharset();
outputEncoding = Charset.forName("UTF-16");
outputLineSeparator = "\n";
src = new File("C:\\Users\\Dam\\Desktop\\testFiles\\testInEndNL.txt");
dst = new File("C:\\Users\\Dam\\Desktop\\testFiles\\testOutEndNL.txt");
copyFile(src, dst, inputEncoding, outputEncoding, outputLineSeparator);
src = new File("C:\\Users\\Dam\\Desktop\\testFiles\\testInEndEOF.txt");
dst = new File("C:\\Users\\Dam\\Desktop\\testFiles\\testOutEndEOF.txt");
copyFile(src, dst, inputEncoding, outputEncoding, outputLineSeparator);
}
private static void copyFile(File src, File dst, Charset inputEncoding, Charset outputEncoding, String outputLineSeparator) {
try {
String oldLineBreak = System.setProperty("line.separator", outputLineSeparator);
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(src), inputEncoding));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(dst), outputEncoding));
String line = reader.readLine();
if(line != null) writer.write(line);
while ((line = reader.readLine()) != null) {
writer.newLine();
writer.write(line);
}
reader.close();
writer.close();
System.setProperty("line.separator", oldLineBreak);
}
catch(Exception e) {
e.printStackTrace();
}
}
}