【问题标题】:How to cancel Files.copy() in Java while not using a non api class?如何在不使用非 api 类的情况下取消 Java 中的 Files.copy()?
【发布时间】:2016-06-22 20:33:52
【问题描述】:

我正在使用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() 吗?

【问题讨论】:

    标签: java io nio


    【解决方案1】:

    如果你想坚持使用 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。

    【讨论】:

      猜你喜欢
      • 2013-06-09
      • 2014-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-12
      • 1970-01-01
      相关资源
      最近更新 更多