如何在不使用非api类的情况下取消Java中的Files.copy()?

时间:2016-03-08 18:27:40

标签: java io nio

我正在使用Files.copy方法下载文件:

Files.copy(in, Paths.get(targetZipFile), StandardCopyOption.REPLACE_EXISTING)

如果下载速度慢,我希望取消它。

我在stackoverflow上找到了以下与标题相同的主题: How to cancel Files.copy() in Java?

但是这个解决方案使用私有api:

访问限制'ExtendedCopyOption'类型不是API(对所需库'C:\Program Files\Java\jdk1.8.0_60\jre\lib\rt.jar'的限制)

还有其他方法可以取消Files.copy()吗?

1 个答案:

答案 0 :(得分:3)

如果你想坚持使用NIO,你可以使用:

try (FileChannel zip = FileChannel.open(Paths.get(targetZipFile),
    StandardOpenOption.CREATE, StandardOpenOption.WRITE)) {

    zip.transferFrom(Channels.newChannel(in), 0, Long.MAX_VALUE);
}

根据documentation,如果线程被中断,FileChannel.transferFrom将抛出ClosedByInterruptException。