如何在Java中取消Files.copy()?

roi*_*oim 14 java io nio

我正在使用Java NIO来复制一些东西:

Files.copy(source, target);
Run Code Online (Sandbox Code Playgroud)

但我想让用户能够取消这个(例如,如果文件太大而且需要一段时间).

我该怎么做?

roi*_*oim 28

使用该选项ExtendedCopyOption.INTERRUPTIBLE.

注意: 此类可能无法在所有环境中公开提供.

基本上,您调用Files.copy(...)一个新线程,然后使用以下命令中断该线程Thread.interrupt():

Thread worker = new Thread() {
    @Override
    public void run() {
        Files.copy(source, target, ExtendedCopyOption.INTERRUPTIBLE);
    }
}
worker.start();
Run Code Online (Sandbox Code Playgroud)

然后取消:

worker.interrupt();
Run Code Online (Sandbox Code Playgroud)

请注意,这将引发一个FileSystemException.