[java]代码库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;

};

}

//源代码片段来自云代码http://yuncode.net

java 批量存储_java I/O 批量插入保存文件相关推荐

  1. 怎么向java窗口中插入XSL表_Java向word中插入Excel文件对象

    前言: 在word文件中,虽然也有表格.但是有时我们想要将Excel中表格的大量数据直接插入到word文档中,这就需要用到word的插入对象的功能,也就是直接将Excel文件当做对象插入到word中. ...

  2. java gzip压缩_Java GZIP示例–压缩和解压缩文件

    java gzip压缩 Welcome to Java GZIP example. GZIP is one of the favorite tool to compress file in Unix ...

  3. java图片批量添加_java实现邮件中插入批量图片

    首先是MimeMessage这个类,继承于javax.mail.Message,底下还有IMAPMessage.POP3Message.SmartMimeMessage.SMTPMessage等实现, ...

  4. java 打文件传输超时_java I/O 一次批量插入保存文件,导致超时问题?

    可以用ExecutorService 这个类,下面是一个用线程池时候下计算文件夹大小的例子,可以参考下 package cq.price; import java.io.File; import ja ...

  5. java jdbc 批量更新_java – JDBC PreparedStatement,批量更新和生成的密钥

    我在批处理中使用jdbc preparedStatement并尝试获取由此创建的生成密钥时出现问题. 代码 : PreparedStatement stmt = null; ... connectio ...

  6. java 批量删除_java根据id批量删除

    1.mapper.xml 传入的参数可以是List也可以是Array数组,ParameterType都写List就可以collection="array"也可以写成collecti ...

  7. java 字节批量拷贝_Java基础回顾 : 利用字节流实现文件的拷贝

    本文是一个范例 : 利用字节流实现文件的拷贝 package example; /** * 文件的拷贝. */ import java.io.File; import java.io.FileInpu ...

  8. java mongodb批量更新_java中mongoTemplate批量更新

    方法:mongoTemplate.getDb().getCollection(tableName).bulkWrite(requests); public BulkWriteResult bulkWr ...

  9. java 常量存储_JAVA 存储空间 寄存器 堆栈 堆 常量存储 非RAM存储

    1.寄存器 这是最快的存储区,因为它位于处理器内部,数量极其有限,所以寄存器根据需求进行分配,你不能直接控制,也不能在程序中感 觉到寄存器存在的任何迹象. 2.堆栈 位于通用RAM(随机访问存储器)中 ...

最新文章

  1. window与共享文件夹访问相关的四个服务
  2. virtuoso根据原理图绘制版图并联接_版图绘制及Virtuoso软件工具使用.ppt
  3. 移动**21*设置无法接通_电话打得出去,但别人打你的电话提示用户无法接通,是怎么回事?...
  4. VTK:结构化网格之StructuredGridOutline
  5. Python项目打包发布到pypi
  6. QLocalServer和QLocalSocket单进程和进程通信
  7. 数学--数论--数论定理--欧拉定理
  8. zip4j实现多线程压缩
  9. 数据结构——堆的C语言实现
  10. c语言静态变量存在堆还是栈,c 类 static 函数 什么样是静态变量?嵌入式C语言的堆栈管理如何实现...
  11. 转载:GCC 提供的原子操作
  12. java 圆形碰撞箱_你会使用“碰撞箱”吗?5种你不知道的玩法 甚至能定位死亡方位...
  13. 计算机资格考试中级工程师种类,中级工程师职称考试类别及注意事项
  14. .net mvc + layui做图片上传(二)—— 使用流上传和下载图片
  15. Java属性文件– java.util.Properties
  16. 条码扫描二维码扫描—ZXing android 改进版本
  17. 浙江大学公共管理学院与阿里云计算有限公司达成合作 | 凌云时刻
  18. iptables: No config file解决方法
  19. 用ftp上传服务器文件大小,ftp服务器上传文件大小
  20. shiro的受权管理

热门文章

  1. cloudstack 4.0 XenServer 日常简单故障处理
  2. call指令和ret指令的配合使用
  3. buHdoZer‘s Arch
  4. 比特现金网络升级之争:1个CPU=1票
  5. 赛门铁克针对勒索软件WannaCry发布全球预警
  6. 利用PHPExcel转Excel柱形图
  7. Effective C++ -- 构造析构赋值运算
  8. “去哪儿网”2015春招前端面试题
  9. 【神回复】看 App 运营高手如何应对六大奇葩用户反馈!
  10. Cnyunwei-Cacti+Nagios安装说明