我们使用类似的代码在 Java 中使用文件复制:
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);
上面的方法有用吗?或者有没有更好的方法来处理这个?
谢谢