java多線程讀取多個(gè)文件的方法
本文實(shí)例為大家分享了java多線程讀取多個(gè)文件的具體代碼,供大家參考,具體內(nèi)容如下
工具類代碼如下:
import java.io.*; import java.util.List; import java.util.concurrent.CountDownLatch; /** * 多線程讀取多個(gè)文件 */ 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為文件結(jié)束 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(); } }
調(diào)用測試:
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(); }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java狀態(tài)機(jī)的一種優(yōu)雅寫法分享
狀態(tài)機(jī)是一種數(shù)學(xué)模型,對于我們業(yè)務(wù)實(shí)現(xiàn)有很大的幫助。我們可以用非常多的方法實(shí)現(xiàn)狀態(tài)機(jī),這篇文章就來介紹一個(gè)狀態(tài)機(jī)優(yōu)雅的實(shí)現(xiàn)方法,希望對大家有所幫助2023-04-04如何解決Maven出現(xiàn)Could not find artifact的問題
這篇文章主要介紹了如何解決Maven出現(xiàn)Could not find artifact的問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04詳解Servlet3.0新特性(從注解配置到websocket編程)
Servlet3.0的出現(xiàn)是servlet史上最大的變革,其中的許多新特性大大的簡化了web應(yīng)用的開發(fā),為廣大勞苦的程序員減輕了壓力,提高了web開發(fā)的效率。2017-04-04SpringBoot訪問接口自動跳轉(zhuǎn)login頁面的問題及解決
這篇文章主要介紹了SpringBoot訪問接口自動跳轉(zhuǎn)login頁面的問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12SpringBoot實(shí)現(xiàn)接口校驗(yàn)簽名調(diào)用的項(xiàng)目實(shí)踐
在以SpringBoot開發(fā)后臺API接口時(shí),會存在哪些接口不安全的因素呢?通常如何去解決的呢?本文主要介紹了SpringBoot實(shí)現(xiàn)接口校驗(yàn)簽名調(diào)用的項(xiàng)目實(shí)踐,感興趣的可以了解一下2023-09-09java基礎(chǔ)之Integer與int類型輸出示例解析
這篇文章主要為大家介紹了java基礎(chǔ)之Integer與int類型輸出示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06Mybatis之類型處理器TypeHandler的作用與自定義方式
這篇文章主要介紹了Mybatis之類型處理器TypeHandler的作用與自定義方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04MyBatis-Plus如何關(guān)閉SQL日志打印詳解
在使用mybatisplus進(jìn)行開發(fā)時(shí),日志是一個(gè)非常有用的工具,它可以幫助我們更好地了解和調(diào)試我們的代碼,這篇文章主要給大家介紹了關(guān)于MyBatis-Plus如何關(guān)閉SQL日志打印的相關(guān)資料,需要的朋友可以參考下2024-03-03Java幾個(gè)實(shí)例帶你進(jìn)階升華上篇
與其明天開始,不如現(xiàn)在行動,本文為你帶來幾個(gè)Java書寫的實(shí)際案例,對鞏固編程的基礎(chǔ)能力很有幫助,快來一起往下看看吧2022-03-03