场景描述:某文件夹下有很多文件和文件夹,要求读取出该文件夹下的所有文件,并将文本打印输出。

案例分析:假设该文件夹下有10个文件,那么我们将所有的文件遍历一遍打印输出就可以了。但如果有100个, 1000个,10000个,甚至更多呢?这时候或许我们应该考虑使用多线程来解决这个问题喽,分批次读取文件。

实现思路:

(1)List<File> readFiles(String filePath)

(2)subFiles(List<File> fileList, int startIndex, int endIndex)

(3)readFile(File file)

(4)FavThreadUtil(List<File> fileList).run()

干货代码:

(一)FavFileUtil.java,上面步骤(1)(2)(3)读取操作文件用

package com.favccxx.favthread.util;import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;public class FavFileUtil {public static List<File> getFileList(String filePath){List<File> fileList = new ArrayList<File>();File file = new File(filePath);if(!file.isDirectory()){System.out.println("文件【" + file.getName() + "】:" + file.getAbsolutePath());fileList.add(file);}else{System.out.println("文件夹【" + file.getName() + "】:" + file.getAbsolutePath());File[] files = file.listFiles();for(int i = 0; i < files.length; i++){if (!files[i].isDirectory()) {System.out.println("  文件【" + files[i].getName() + "】:");fileList.add(files[i]);} else if (files[i].isDirectory()) {getFileList(files[i].getAbsolutePath());}}}return fileList;}public static List<File> subFiles(List<File> list, int startIndex, int endIndex){if(endIndex>list.size()){return list.subList(startIndex, list.size());}return list.subList(startIndex, endIndex);}public static void readFile(File file) throws IOException{        //读取文件FileInputStream is = new FileInputStream(file);//获取文件的字符流InputStreamReader isr = new InputStreamReader(is);//缓冲BufferedReader br = new BufferedReader(isr);String line = null;while((line = br.readLine())!=null ){System.out.println(":::" + line);}br.close();}}

(二)FavThreadUtil.java,上面步骤(4)操作文件列表用

package com.favccxx.favthread.util;import java.io.File;
import java.io.IOException;
import java.util.List;public class FavThreadUtil implements Runnable {private List<File> fileList;public FavThreadUtil(List<File> fileList) {this.fileList = fileList;}@Overridepublic void run() {for(File file : fileList){try {FavFileUtil.readFile(file);} catch (IOException e) {e.printStackTrace();}}}}

(三)Main.java,Java Main程序运行测试。

package com.favccxx.favthread.main;import java.io.File;
import java.util.List;import com.favccxx.favthread.util.FavFileUtil;
import com.favccxx.favthread.util.FavThreadUtil;public class Main {public static void main(String[] args) {List<File> fileList = FavFileUtil.getFileList("D:\\log");List<File> aList = fileList.subList(0, 10);List<File> bList = fileList.subList(10, 20);FavThreadUtil afavThreatUtil = new FavThreadUtil(aList);FavThreadUtil bfavThreatUtil = new FavThreadUtil(bList);new Thread(afavThreatUtil, "线程1").start();new Thread(bfavThreatUtil, "线程2").start();}}

Java多线程体现的是Java面向对象的封装特性,体现的人文的分而治之的思想。

基于Java多线程操作文件案例分享相关推荐

  1. 基于Java多线程的打怪升级类游戏设计与开发

    摘要:本文论述了通过JAVA多线程.基于JAVA Swing的GUI图形用户界面设计.IO输入输出流.JDBC技术,实现了游戏系统的UI设计.游戏数据的存储.关卡的设置.用户头像的上传与更改.游戏数据 ...

  2. 基于Java的NetCDF文件解析

    近期在做的项目中,需要使用Java语言进行NetCDF文件的解析. 然而,当在寻找资料时,发现基于Java语言的资料相较于Python少了很多,而且现有的基于Java解析NetCDF文件到CSV的资料 ...

  3. Java读写txt文件案例-统计学生名单

    Java读写txt文件案例-统计学生名单,具体应用请看代码中的实现原理. package shuzu; import java.io.BufferedReader; import java.io.Bu ...

  4. Java多线程写文件

    问题场景 调用多个线程将多个文件进行合并,当初没有考虑到多线程操作文件会造成的脏数据,导致了业务出问题. 解决方法 审查文件操作的方法,进行文件加锁,同一时间只能一个线程对文件进行操作. 代码展示 p ...

  5. JAVA物联所需技术_基于JAVA多线程技术解决物联云端服务雪崩效应的方法与流程...

    本发明涉及互联网技术领域,特别涉及一种基于JAVA多线程技术解决物联云端服务雪崩效应的方法. 背景技术: 目前,物联云系统已经作为普遍的智能电视平台出现在我们面前,而细致分析物联云系统我们可以发现,当 ...

  6. Java多线程下载文件

    Java多线程下载文件 优化:合理利用服务器资源,将资源利用最大化,加快下载速度 一般有两种方式: 线程池里面有N个线程,多线程下载单个文件,将网络路径的文件流切割成多快,每个线程下载一小部分,然后写 ...

  7. 基于java的excel_基于Java的Excel文件操作

    电脑知识与技术 本栏目责任编辑: 王力计算机教育 1 引言在 Web 应用日益盛行的今天, 通过 Web 来操作 Excel 文件的需求越来越强烈, 目前较为流行的操作是在 JSP 或 Servlet ...

  8. k8s中java内存泄漏,Kubernetes 案例分享:如何避免 JVM 应用内存耗尽

    原标题:Kubernetes 案例分享:如何避免 JVM 应用内存耗尽 编译:ImportNew/唐尤华srvaroa.github.io/jvm/kubernetes/memory/docker/o ...

  9. Java多线程游戏仿真实例分享

    这是一篇学习分享博客,这篇博客将会介绍以下几项内容: 1.如何让一个程序同时做多件事?(多线程的创建.多线程的应用) 2.如何让小球在画面中真实地动起来?(赋予小球匀速直线.自由落体.上抛等向量运动) ...

最新文章

  1. 如果有电脑——计算机达人成长之路(36)
  2. Java手机忘了密码怎么办_手机开机密码忘记了怎么办
  3. linux远程hadoop,远程调试Hadoop
  4. node.js async await 配合Promise对象使用
  5. kubernetes之二:集群环境搭建
  6. 《剑指 Offer I》刷题笔记 51 ~ 61 题
  7. SilverLight学习
  8. 20160402系统集成管理工程师(test3)
  9. Win10预览版已经支持WSL的带GUI的应用
  10. [转] Ubuntu 16.04 RTL8111/8168/8411 不能上网 经常断网解决办法
  11. 程序员未来前景怎么样
  12. 三极管NPN和PNP的区别
  13. 当数据中台遇上智能 看中台“鼻祖”阿里巴巴又有什么新花样?
  14. python不是内部命令或外部命令,也不是可执行程序解决方案”解决方法
  15. java实现在线预览的功能(一)word转html
  16. Samsung 展示6G 原型,测试速度达6.2Gbps,最终目标为1000Gbps
  17. bzoj 3055 礼物运送
  18. 正方形的面积用java写,java 编程 使用接口方式计算圆和正方形的面积(S)和周长(L)...
  19. 《强化学习周刊》第23期:NeurIPS 2021强化学习的最新研究与应用
  20. 【EOS】DAPP开源项目

热门文章

  1. python函数分为_python 函数
  2. python自动化功能测试_python、selenium自动化功能测试
  3. 【知识星球】LeNet5,AlexNet,VGG,MobileNet它们的前身都是什么,你知道吗?
  4. 2022年全球及中国燃气供应系统 (FGSS)行业设施规模与十四五布局建设报告
  5. 全球及中国水产养殖和畜牧保险行业风险研究与“十四五”投资建议报告2021年版
  6. 中国家用中央空调行业发展动态解析及规划趋向预测报告2022-2028年版
  7. 中国涂料树脂行业投资盈利预测及发展规模展望报告2021-2027年版
  8. linux mv命令批量,linux 如何用mv命令批量更改文件名?
  9. 从玉农业智能蔬菜技术 农业大健康·林裕豪:中国金控斥资打造
  10. CMDB收集资产脚本