複製文件,我嘗試了一些強制性的參數拷貝文件:inputEncoding,outputEncoding和outputLineSeparator。的Java 6的readline
但是,當我運行下面的代碼,我與CRLF最終字符的文件沒有很好地複製,這最後CRLF焦炭disapear。
我認爲3行之後的readLine返回null,因爲4號線是空的...
我的目標是要找到的CopyFile函數,能夠嚴格複製這個以下兩個文件。
有沒有辦法複製這個最後的空行(最後一個換行符)?
在此先感謝您的幫助。
輸入文件
文件testInEndNL.txt(顯式字符)
A<CRLF>
B<CRLF>
C<CRLF>
文件testOutEndEOF.txt(顯式字符)
A<CRLF>
B<CRLF>
C
輸出文件
文件testOutEndNL.txt(顯式字符)KO我
A<LF>
B<LF>
C
文件testInEndEOF.txt(顯式字符)OK我
A<LF>
B<LF>
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();
}
}
}
你真的指Java 6嗎?你甚至不能使用Java 7嗎? – fge 2014-11-06 20:39:38
'System.setProperty'中的方法?祝你好運多線程 – zapl 2014-11-06 20:58:49
不,因爲我的問題我必須留在JAVA 6 – Damien 2014-11-06 21:09:15