java 打文件传输超时_java I/O 一次批量插入保存文件,导致超时问题?
可以用ExecutorService 这个类,下面是一个用线程池时候下计算文件夹大小的例子,可以参考下
package cq.price;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
public class ConcurrentTotalFileSize {
public static void main(String[] args) throws InterruptedException,
ExecutionException, TimeoutException {
long start = System.nanoTime();
System.out.println("Total Size: "
+ new ConcurrentTotalFileSize()
.getTotalFileSizeOfFilesInDir(new File("F:\资料")));
System.out.println("Time: " + (System.nanoTime() - start)
/ 1.0e9);
}
public long getTotalFileSizeOfFilesInDir(final File file)
throws InterruptedException, ExecutionException, TimeoutException {
if (file.isFile()) {
return file.length();
}
ExecutorService service = Executors.newFixedThreadPool(4);
long total;
try {
total = 0;
List directories = new ArrayList();
directories.add(file);
while (!directories.isEmpty()) {
final List> partialResults = new ArrayList>();
for (final File direcotry : directories) {
partialResults.add(service
.submit(new Callable() {
@Override
public SubDirectoriesAndSize call()
throws Exception {
return getTotalAndSubDirectories(direcotry);
}
}));
}
directories.clear();
for (Future future : partialResults) {
SubDirectoriesAndSize directoriesAndSize = future.get(100,
TimeUnit.SECONDS);
if (directoriesAndSize == null) {
continue;
}
total += directoriesAndSize.size;
directories.addAll(directoriesAndSize.subDirectories);
}
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e.getMessage(), e);
} finally {
service.shutdown();
}
return total;
}
public SubDirectoriesAndSize getTotalAndSubDirectories(final File file) {
long total = 0;
List subDirectories = new ArrayList();
if (file.isDirectory()) {
File[] children = file.listFiles();
if (children != null) {
for (File child : children) {
if (child.isFile()) {
total += child.length();
} else {
subDirectories.add(child);
}
}
}
}
return new SubDirectoriesAndSize(total, subDirectories);
}
}
/**
* 记录当初文件夹的下文件的大小以及子文件夹
*
* @author Administrator
*
*/
class SubDirectoriesAndSize {
final public long size;
final public List subDirectories;
public SubDirectoriesAndSize(long size, List subDirectories) {
super();
this.size = size;
this.subDirectories = subDirectories;
};
}
java 打文件传输超时_java I/O 一次批量插入保存文件,导致超时问题?相关推荐
- java 批量存储_java I/O 批量插入保存文件
[java]代码库package cq.price; import java.io.File; import java.util.ArrayList; import java.util.List; i ...
- Linux下文件重命名、创建、删除、修改及保存文件
Linux下文件重命名.创建.删除.修改及保存文件 一.重命名(更名) linux 给文件改名的命令是mv命令 mv命令来为文件或目录改名或将文件由一个目录移入另一个目录中.该命令等同于DOS系统下的 ...
- java流式传输对象_Java性能:面向教学与流式传输
java流式传输对象 在for循环中向上或向下计数是最有效的迭代方式吗? 有时答案既不可行. 阅读这篇文章,了解不同迭代品种的影响. 迭代性能 关于如何以高性能进行迭代有很多观点. Java中的传统迭 ...
- java file delete 不及时_java中File的delete()方法刪除文件失敗的原因
一般來說 java file.delete失敗 有以下幾個原因 1.看看是否被別的進程引用,手工刪除試試(刪除不了就是被別的進程占用) 2.file是文件夾 並且不為空,有別的文件夾或文件, 3.極有 ...
- java生成pdf盖章合同_Java中使用 FreeMarker 生成pdf盖章合同文件
[实例简介] 1.html模板+model数据,通过freemarker进行渲染,便于维护和修改 2.渲染后的html流,可通过Flying Saucer组件生成pdf文件流,或者生成pdf后再转成j ...
- ftp文件传输工具,5款你会喜欢的ftp文件传输工具
对于ftp文件传输工具,你了解多少?其实一般人也接触不到这种软件.ftp文件传输工具主要是针对从事网站管理的工作人员比较有利的一款工具.可以帮助他们快速的解决工作中的问题.方便.简单.快捷又明了的解决 ...
- 利用java多线程向MongoDB中批量插入静态文件
第一步.开发环境: win7 64位(注:MongoDb在32位windows上有数量限制(2G),详见官方文档) Mongodb3.2 mongofb_java_driver 3.2.2 第二部.安 ...
- 渗透测试常用文件传输方法-Linux篇(如何向Linux服务器中上传文件?) (゚益゚メ) 渗透测试
文章目录 介绍 攻击机挂载文件 Python脚本挂载 使用阿帕奇服务挂载 传输文件 wget curl netcat sftp 其他方法 DNS传输数据 介绍 文件上传一般分为上传和下载,下面我所指的 ...
- 渗透测试常用文件传输方法-Windows篇(如何向Windows服务器中上传文件?) (゚益゚メ) 渗透测试
文章目录 文件传输 certutil BitsAdmin Powershell SCP Windows文件共享 文件传输 文件传输在渗透测试中主要用于将攻击载荷上传到目标主机或者获取目标资产使用. 下 ...
最新文章
- 利用box-shadow绘图
- 史上最扯Java图形绘制(J2SE)之一JAVA动画效果
- 步步为营 .NET 代码重构学习笔记 十一
- python怎么开发安卓程序_怎样用python开发安卓app-到底如何使用Python开发Android程序.txt...
- 记-php的设计模式
- chrome非常好用的图片放大插件 Imagus
- FATAL: Failed to start gitlab-runner: “systemctl“ failed: exit status 5, Failed to start gitlab-runn
- pandas 公益学习 综合练习与学习总结
- 牛客网C++开发面试经验汇总
- 腾讯云主机SSH连接不上如何解决
- 微信支付接口加密技术详解
- 中国三相开关磁阻电动机行业市场供需与战略研究报告
- unity 2d 动画
- Unity中实现相机的跟随
- 2016 iherb 图文海淘攻略
- 三星 Samsung Galaxy Note/I9220/N7000 ZCLPP 4.0.4 国行ROM优化版
- 大数据分析行业发展趋势
- wms、wmts和wfs的区别
- fcpx插件:Stupid raisins show pop for Mac(20个专业设计徽标动画)
- 面试之站在面试官的角度去面试