java多线程读取多个文件的方法
作者:戴着红领巾走世界 发布时间:2022-12-05 04:37:45
标签:java,多线程,读取文件
本文实例为大家分享了java多线程读取多个文件的具体代码,供大家参考,具体内容如下
工具类代码如下:
import java.io.*;
import java.util.List;
import java.util.concurrent.CountDownLatch;
/**
* 多线程读取多个文件
*/
public class FileThread extends Thread{
private final CountDownLatch countDownLatch = new CountDownLatch(10);
private int fileIndex;
private List<String> filelist;
private String filepath = "D:\\LocalFtpServer\\data20181229\\";
private String movepath = "D:\\LocalFtpServer\\data20181229_01\\";
public int getFileIndex() {
return fileIndex;
}
public void setFileIndex(int fileIndex) {
this.fileIndex = fileIndex;
}
public List<String> getFilelist() {
return filelist;
}
public void setFilelist(List<String> filelist) {
this.filelist = filelist;
}
@Override
public void run() {
for (int i = 0; i < filelist.size(); i++) {
if (i % 10 == fileIndex) {
//读取文件
File readfile = new File(filepath + filelist.get(i));
InputStreamReader isr = null;
try {
isr = new InputStreamReader(new FileInputStream(readfile), "UTF-8");
BufferedReader reader = new BufferedReader(isr);
String line = null;
// 一次读入一行,直到读入null为文件结束
while ((line = reader.readLine()) != null) {
System.out.println(line );
}
reader.close();
isr.close();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//读取完后, 移动文件位置
readfile.renameTo(new File(movepath + readfile.getName()));
}
}
countDownLatch.countDown();
}
}
调用测试:
public static void main(String[] args) throws IOException {
String filepath = "D:\\LocalFtpServer\\data20181229\\";
File file = new File(filepath);
//读取目录下所有文件
String[] filelist = file.list();
List<String> fList=new ArrayList<String>();
for (int i = 0; i < filelist.length; i++) {
if (filelist[i].startsWith("data") && filelist[i].endsWith(".txt")) {
fList.add(filelist[i]);
}
}
for(int i=0;i<30;i++){
FileThread fileThread=new FileThread();
fileThread.setFileIndex(i);
fileThread.setFilelist(fList);
fileThread.start();
}
countDownLatch.await();
}
来源:https://blog.csdn.net/HoneyYHQ9988/article/details/85601628


猜你喜欢
- 工厂模式Spring中bean的创建,默认是框架利用反射new出来的bean实例。有时候也会有一些复杂的情况。假设有一个飞机,属性如下,现在
- Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。它与 JSP,Velocity,FreeMaker 等模
- 1、何为依赖冲突Maven是个很好用的依赖管理工具,但是再好的东西也不是完美的。Maven的依赖机制会导致Jar包的冲突。举个例子,现在你的
- 效果:说明:获取本局域网的MAC地址(非本机的MAC地址)代码:/// <summary>
- 一、实验目的1. 掌握各种高级UI控件的基本使用;2. 能够实现Tab切换效果。二、实验任务1. 根据原型图设计界面;2. 实现Tab切换;
- 一、为什么需要服务网关:1、什么是服务网关:
- 这篇文章主要介绍了SpringBoot项目的测试类实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要
- 一、Redis分布式锁概念篇建议直接采用Redis的官方推荐的Redisson作为redis的分布式锁1.1、为什么要使用分布式锁 
- 前言复习一下spring实现IOC的源码流程准备工作:强烈建议大家从git上拉取spring源码来学习Spring源码。因为里面相较于IDE
- 这个例子用于演示在Spring Boot应用中如何验证Web 应用的输入,我们将会建立一个简单的Spring MVC应用,来读取用户输入并使
- 在项目开发中,我们经常会遇到表中的字段名和表对应实体类的属性名称不一定都是完全相同的情况,下面小编给大家演示一下这种情况下的如何解决字段名与
- 最近因为fastjson安全漏洞,升级jar包时,踩了一些坑。新版本FastJsonHttpMessageConverter初始化,默认设置
- Windows操作系统可以实现重命名文件操作,却不能实现批量重命名。本实例实现了批量重命名功能,可以将一个文件夹内同一类型的文件按照一定的规
- Java持久化框架:Hibernate与MybatisHibernate和Mybatis是两个Java持久化框架,用于将Java对象映射到关
- java使用stream实现list中对象属性的合并:根据两个List中的某个相同字段合并成一条List,包含两个List中的字段一、前言为
- 对数组使用 foreachC#提供 foreach 语句。 该语句提供一种简单、明了的方法来循环访问数组或任何可枚举集合的元素。 forea
- 问题描述:在windows系统下,idea中,操作terminal控制台,使用git log查看日志时,出现如下乱码为什么参考网上很多的gi
- Android InputAndroid Input指的是输入事件,主要是触摸滑动,当然还包括类似蓝牙外设的输入。Input涉及到的主要模块
- Android Build类的详解及简单实例一、类结构:java.lang.Object? android.os.Build二、类概述:从系
- //C# 根据当前时间获取本周、下周、本月、下月、本季度等时间段DateTime dt = DateTime.Now; //当前