读取某个文件夹下面的所有文件,使用多线程处理,例如读取E盘下面的文件内容:
package thread;
import java.io.File;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
public class BigDataFile {
private class DealFile implements Runnable
{
//存放遍历的结果
BlockingQueue<File> bFile = null;
//每个线程独有的file文件夹
File file = null;
public DealFile(BlockingQueue<File> bFile, File file)
{
this.bFile = bFile;
this.file = file;
}
@Override
public void run() {
getFileName(file.listFiles());
}
/**
* 迭代遍历文件夹。
* */
private final void getFileName(File[] fileDirectory)
{
for(File file : fileDirectory)
{
if(file.isDirectory())
{
//继续迭代处理
getFileName(file.listFiles());
}
else
{
//输出文件的名称
System.out.println(file.getName());
bFile.add(file);
}
}
}
}
public static void main(String[] args) throws InterruptedException {
/**
* 由于LinkedBlockingQueue实现是线程安全的,实现了先进先出等特性,是作为生产者消费者的首选,LinkedBlockingQueue
* 可以指定容量,也可以不指定,不指定的话,默认最大是Integer.MAX_VALUE,
* 其中主要用到put和take方法,put方法在队列满的时候会阻塞直到有队列成员被消费,take方法在队列空的时候会阻塞,
* 直到有队列成员被放进来。
* */
BlockingQueue<File> bFile = new LinkedBlockingQueue<File>();
//需要遍历的文件夹
File file = new File("D://");
//线程池
ExecutorService es = Executors.newCachedThreadPool();
BigDataFile bf = new BigDataFile();
/**
* new File("D://") 文件夹下面有几个文件夹new 几个线程执行。
* */
for(File f : file.listFiles())
{
if(f.isDirectory())
{
es.execute(bf.new DealFile(bFile, f));
}
else
{
System.out.println(f.getName());
bFile.add(f);
}
}
//关闭线程池
es.shutdown();
}
}
分享到:
相关推荐
本文将介绍Java中利用线程池递归的方式压缩文件夹下面的所有子文件,具体方法如下: Gzip单个文件压缩 对于单个文件使用GZip压缩。 package date0805.demo1; import java.io.BufferedInputStream; ...
利用线程池实现拷贝目录的效果,让其效果等同于cp命令。
轻松解决普通poi形式导出Excel的中出现的栈溢出问题,此资源可实现千万级数据分批导出csv文件,测试实现16500000条数据大概80秒左右;具体表里内容。
您可以使用以下命令运行out/文件夹中的.jar文件: java -jar out/MultithreadedPoolingServer.jar [port] 如何使用 默认情况下,Web服务器正在端口8080上侦听。 您可以使用第一个参数指定自己的端口。 例如,在...
实例80 删除文件夹和文件 201 实例81 文件复制与移动 204 实例82 多种方式读取文件内容 209 实例83 多种方式写文件 213 实例84 随机访问文件 216 实例85 追加文件内容 219 实例86 文件锁定 220 实例87 分割与...
实例143 使用线程池优化多线程编程 186 实例144 Object类中线程相关的方法 187 实例145 哲学家就餐问题 189 实例146 使用信号量实现线程同步 190 实例147 使用原子变量实现线程同步 191 实例148 使用事件分配线程...
批量pdf转高清png图片,支持多文件多线程同时转换,转出支持彩色、黑白与灰度...使用方法:双击运行软件,选择要执行程序点击确定,跳出文件夹拾取框选择文件所在文件夹,程序自动转换文件夹下所有pdf文件,递归方式。
使用线程池的分布式内容收获 包含内容检索和解析的Web内容收集通常是分析任务(例如搜索,广告放置和相关性排名)的先兆。 作为该项目的一部分,我开发了一种分布式内容收集器,该收集器使用线程池来检索和解析内容...
使用线程池来一次可以处理多个http请求。 支持的请求 得到 邮政 其他文件的HTTP请求没有实现,只支持最简单的功能。上传文件,显示文件,处理GET请求中的参数,以及POST表单中的文件数据。 漏洞 这个bug我不知道如何...
13.2.2 使用处理程序延迟主线程上的工作 13.2.3 延迟工作的处理程序源代码示例 13.2.4 构造合适的Message对象 13.2.5 将Message对象发送给队列 13.2.6 响应handleMessage回调 13.3 使用工作线程 ...
13.2.2 使用处理程序延迟主线程上的工作 13.2.3 延迟工作的处理程序源代码示例 13.2.4 构造合适的Message对象 13.2.5 将Message对象发送给队列 13.2.6 响应handleMessage回调 13.3 使用工作线程 ...
实例66 文件夹中的文件列表 实例67 读写文本文件 实例68 读写二进制文件 实例69 显示系统日期与时间(1) 实例70 显示差值的日期与时间(2) 实例71 时钟发生器应用 实例72 在.NET程序设计中使用ATL 实例73 ...
开发依赖于线程池和非阻塞I / O的可伸缩服务器来处理高网络流量。 该实现包括两个组件,一个服务器和多个客户端(最少100个客户端)。 服务器从客户端接受传入的网络连接,从这些连接接收传入的流量,并通过发送回...
此文件的目的是解释我如何选择使用线程池来实现多线程 Web 服务器。 基本上,我决定在 JDK7 中引入的 Asynchronous NIO 框架之上构建这个 HTTP Server,并利用 ProActor 模式的优势。 参考 项目属性 源代码是用 ...
实例64 有趣的列表框窗体 实例65 数学函数应用 <br>第3篇 Visual C#高级编程实例 实例66 文件夹中的文件列表 实例67 读写文本文件 实例68 读写二进制文件 实例69 显示系统日期与时间(1...
实例64 有趣的列表框窗体 实例65 数学函数应用 <br>第3篇 Visual C#高级编程实例 实例66 文件夹中的文件列表 实例67 读写文本文件 实例68 读写二进制文件 实例69 显示系统日期与时间(1...
特征异步多线程图像加载使用AsyncImageLoaderConfig各种自定义选项(线程池大小,占位符图像,图像下采样,内存和文件缓存位置等) 在对图像进行拖尾处理时以百分比形式检索进度如何设置? 将此.aar文件放入您的...