我们使用类似的代码在Java中使用filecopy:
private void copyFileUsingFileChannels(File source, File dest) throws IOException {
FileChannel inputChannel = null;
FileChannel outputChannel = null;
try {
inputChannel = new FileInputStream(source).getChannel();
outputChannel = new FileOutputStream(dest).getChannel();
outputChannel.transferFrom(inputChannel, 0, inputChannel.size());
} finally {
inputChannel.close();
outputChannel.close();
}
}
问题有时source
和dest
可以指向同一个文件,在这种情况下,以下语句outputChannel = new FileOutputStream(dest).getChannel();
导致源截断为0字节,即使源到目前为止是400 kb,因为我认为它打开了一个用相同句柄写入的流。那么解决这个问题的方法是什么呢?
我应该在代码中添加一些内容
if (! (sourcec.getAbsolutePath().equalsIgnoreCase(destinationc.getAbsolutePath())))
copyFiles(sourcec, destinationc);
上述工作会不会?或者有更好的方法来解决这个问题吗?
谢谢
答案 0 :(得分:1)
当您打开没有附加模式的new FileOutputStream
时,如果文件存在,您将截断该文件,否则将创建该文件。 (附加模式不会帮助你,但不会截断文件)你想避免将文件复制到自身,所以我建议你做你建议的检查,或者使用你不试图在第一名。