生活随笔
收集整理的這篇文章主要介紹了
基于Java多线程操作文件案例分享
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
? ? 場(chǎng)景描述:某文件夾下有很多文件和文件夾,要求讀取出該文件夾下的所有文件,并將文本打印輸出。
? ? 案例分析:假設(shè)該文件夾下有10個(gè)文件,那么我們將所有的文件遍歷一遍打印輸出就可以了。但如果有100個(gè), 1000個(gè),10000個(gè),甚至更多呢?這時(shí)候或許我們應(yīng)該考慮使用多線程來解決這個(gè)問題嘍,分批次讀取文件。
? ? 實(shí)現(xiàn)思路:
? ? ? ? ? ? (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程序運(yùn)行測(cè)試。?
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多線程體現(xiàn)的是Java面向?qū)ο蟮姆庋b特性,體現(xiàn)的人文的分而治之的思想。
總結(jié)
以上是生活随笔為你收集整理的基于Java多线程操作文件案例分享的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。