I try to copy files with some mandatory parameters : inputEncoding, outputEncoding and outputLineSeparator.
But when I run my following code, my file with the CRLF final char is not well copy, this last CRLF char disapear.
I think readLine return null after line 3 because line 4 is empty...
My goal is to find the copyfile function that could strictly copy this two following files.
Is there a way to copy also this final empty line (the last newline char) ?
Thanks in advance for any help.
Input Files
File testInEndNL.txt(explicit char)
A<CRLF>
B<CRLF>
C<CRLF>
File testOutEndEOF.txt(explicit char)
A<CRLF>
B<CRLF>
C
Output Files
File testOutEndNL.txt(explicit char) KO for me
A<LF>
B<LF>
C
File testInEndEOF.txt(explicit char) OK for me
A<LF>
B<LF>
C
Code
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();
}
}
}