最後fin.read()
は何も読まないからです。JavaDocによると、が返されます。-1
このため、あなたfout.write(i)
はそれを書きます-1
。この動作を修正するには、次のようにします。
do {
i = fin.read();
if (i>-1) //note the extra line
fout.write(i);
} while (i != -1);
または、 を通話に変更しdo .. while
ますwhile .. do
。
NIO
一度に1 文字ずつ転送するよりもはるかに優れたパフォーマンスを発揮する新しい API も検討することをお勧めします。
File sourceFile = new File("C:/Users/NetBeansProjects/QuestionOne/input.txt");
File destFile = new File("C:/Users/NetBeansProjects/QuestionOne/output.txt");
FileChannel source = null;
FileChannel destination = null;
try {
if (!destFile.exists()) {
destFile.createNewFile();
}
source = new FileInputStream(sourceFile).getChannel();
destination = new FileOutputStream(destFile).getChannel();
destination.transferFrom(source, 0, source.size());
} catch (IOException e) {
System.err.println("Error while trying to transfer content");
//e.printStackTrace();
} finally {
try{
if (source != null)
source.close();
if (destination != null)
destination.close();
}catch(IOException e){
System.err.println("Not able to close the channels");
//e.printStackTrace();
}
}