读取某个文件夹下面的所有文件,使用多线程处理,例如读取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命令。
在IT领域,获取文件夹中的特定类型文件,如图片,是一项常见的任务,尤其在处理大量数据或构建多媒体应用时。这个任务可以通过编程语言中的文件系统操作来实现,例如Python、Java、C#等。以下是一个关于如何在Python...
为了解决这个问题,我们可以创建一个单独的线程或线程池来处理文件复制。在Python中,可以使用`threading`模块;在Java中,可以使用`Thread`类或`ExecutorService`;在C#中,可以使用`System.Threading.Thread`或`...
在遍历磁盘文件时,如果使用多线程,我们可以将磁盘的不同区域分配给不同的线程,这样就能并行地读取和处理文件,从而显著提高遍历速度。 实现多线程遍历磁盘文件,我们需要以下几个关键步骤: 1. **创建线程池**...
2. **流式处理**:使用Java的BufferedWriter类进行流式写入,每批数据读取后立即写入文件,减少内存占用。 3. **线程安全**:如果需要并发处理,可能需要使用多线程,并确保对文件的访问是线程安全的,比如使用...
在Java编程中,多线程读取多个文件是一项常见需求,尤其在文件数量较多或者文件较大时,能够提升处理效率。本文将详细介绍如何在Java中使用多线程来同时读取多个文件。 首先,本文涉及到的核心类是`Thread`类,这是...
同时,可能会使用线程池来并发处理文件,提高整体解析速度。 总的来说,Java EPUB解析模块是电子书应用的核心部分,它使得开发者可以轻松地与EPUB内容交互,创建阅读器应用或进行内容分析。通过从FBreader项目中...
FTP文件管理管理模块在Java中的实现涉及到多个关键知识点,涵盖了网络通信、文件处理以及多线程编程。以下是对这些知识点的详细阐述: 1. FTP(File Transfer Protocol)协议:FTP是一种用于在网络上进行文件传输的...
Java线程池是一种高效管理线程的技术,它允许开发者预定义一组线程,这些线程可以重复使用,减少了创建和销毁线程的开销。在Java中,`java.util.concurrent` 包提供了线程池的相关实现,其中ExecutorService是线程池...
在"threadpool"和"common"这两个文件夹中,可能包含了实现这些类的源代码文件,以及可能用于支持线程池运行的通用工具类或辅助函数。"threadpool"可能包含了线程池相关的类和接口实现,而"common"可能包含了一些常用...
在Java中,我们可以使用`java.io`和`java.nio`包中的类来处理文件和目录。例如,`File`类用于表示文件或目录,`Files`类提供了大量静态方法用于操作文件系统对象。在遍历和读取文件夹时,通常会使用递归算法,确保...
对于需要处理或解析这些文件的情况,掌握java批量解析微信dat文件的技术显得尤为重要。 首先,要了解的是微信dat文件的结构,通常它是经过加密处理的,需要特定的解密手段才能正确读取内容。从文档提供的内容来看,...
可以考虑优化算法,比如使用线程池异步删除文件。 #### 四、总结 本文详细介绍了一段用于删除SVN版本控制系统中`.svn`文件夹的Java代码。通过对代码结构的逐层解析,不仅展示了如何实现这一功能,还探讨了代码设计...
HttpClient支持多线程请求,可以使用ExecutorService来管理线程池。同时,注意防止对服务器的过度请求,遵守其速率限制政策,避免被封IP。 7. **安全性与身份验证**: 访问某些远程接口可能需要身份验证。...
在处理文件操作时,Java的`java.io`和`java.nio`包提供了强大的文件I/O功能。例如,`java.io.File`类可以用于文件和目录的创建、删除以及获取文件信息,而`java.nio.file.Files`类则提供了更现代的文件操作API,如...
文档"Java线程池.doc"和文本文件"java线程池学习1.txt"、"java线程池学习2.txt"很可能是关于如何创建和使用线程池的教程,它们可能涵盖了以下内容: 1. 创建线程池的基本步骤:定义核心线程数、最大线程数、线程...
在这个Java实现的系统中,客户端负责发起文件传输请求,而服务器端则处理这些请求并完成实际的文件传输操作。 在Java中,文件传输可以利用多种API,如Java IO(输入/输出)和NIO(非阻塞输入/输出)。IO API包括...
10. **性能优化**:在处理大量图片或大文件时,可以考虑使用异步编程模型,如Java 8的`CompletableFuture`,或者使用线程池来并行处理任务,提高系统性能。 总的来说,这个示例源码涉及了Java网络编程、文件操作、...
在本文中,我们将深入探讨如何使用Java和流处理(Stream)技术实现一个JSP音乐文件批量上传系统,并集成定时播放功能。"jspmusicupload_java_streamzdd_"项目可能是一个示例,展示了如何在Web应用程序中处理这样的...