gpt4 book ai didi

java - 异步 Commons-io 操作?

转载 作者:行者123 更新时间:2023-12-01 23:27:07 24 4
gpt4 key购买 nike

我想从 URL 下载文件,并且我正在使用 commons-io为了那个原因。当我下载时,我想根据要下载的文件类型设置超时。基本上,如果无法在指定时间内下载文件,该方法应该返回错误。

我查看了javadocs发现所有IO操作都是同步的(阻塞IO操作)是否有其他替代库可以提供与 commons-io 相同的效率和易用性?

最佳答案

你可以做这样的事情。

ExecutorService executorService = acquireExecutorService();

final int readTimeout = 1000;
final int connectionTimeout = 2000;
final File target = new File("target");
final URL source = new URL("source");

Future<?> task = executorService.submit(new Runnable() {
@Override
public void run() {
try {
FileUtils.copyURLToFile(source, target, connectionTimeout, readTimeout);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
});
try {
task.get(30, TimeUnit.SECONDS);
} catch (InterruptedException | ExecutionException e) {
//handle exceptions
} catch (TimeoutException e) {
task.cancel(true); //interrupt task
}

通过使用执行程序服务,您可以异步下载文件。 task.get(30, TimeUnit.SECONDS); 指定您要等待下载完成的时间。如果没有及时完成,您可以尝试取消任务并中断它,尽管中断线程可能不起作用,因为我不认为 FileUtils.copyURLToFile() 检查中断标志线程的。这意味着下载仍将在后台继续进行。如果您确实想停止下载,则必须自己实现copyURLToFile并定期检查Thread.interrupted(),以便在线程中断时停止下载.

关于java - 异步 Commons-io 操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19833068/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com