精华内容
下载资源
问答
  • 本文实例为大家分享了java多线程读取多个文件的具体代码,供大家参考,具体内容如下工具类代码如下:import java.io.*;import java.util.List;import java.util.concurrent.CountDownLatch;/*** 多线程读取多个文件*...

    本文实例为大家分享了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 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 getFilelist() {

    return filelist;

    }

    public void setFilelist(List 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 fList=new ArrayList();

    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();

    }

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    展开全文
  • 工具类代码如下:import java.io.*;import java.util.List;import java.util..../*** 多线程读取多个文件*/public class FileThread extends Thread{private final CountDownLatch countDownLatch = new Count...

    工具类代码如下:

    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 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 getFilelist() {

    return filelist;

    }

    public void setFilelist(List 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 fList=new ArrayList();

    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();

    }

    展开全文
  • 本文实例为大家分享了java多线程读取多个文件的具体代码,供大家参考,具体内容如下工具类代码如下:import java.io.*; import java.util.List; import java.util.concurrent.CountDownLatch; /** * 多线程读取多个...

    本文实例为大家分享了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 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 getFilelist() { return filelist; } public void setFilelist(List 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 fList=new ArrayList(); 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(); }

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持华域联盟。

    展开全文
  • java多线程读取文件夹中的多个文件问题,新手多谢!现在想利用多线程读取一个文件夹中的多个xml文件,但是现在每个线程都把所有文件全部读一遍,我希望的是一个线程读过的文件,其他线程就不去读了,请问我的代码错...

    java多线程读取文件夹中的多个文件问题,新手多谢!

    现在想利用多线程读取一个文件夹中的多个xml文件,但是现在每个线程都把所有文件全部读一遍,我希望的是一个线程读过的文件,其他线程就不去读了,请问我的代码错在什么地方?本人新手,多谢!

    ps:我也试过每读一个文件就把它从列表里删除,还是不行。。

    package comparison;

    import java.io.BufferedReader;

    import java.io.File;

    import java.io.FileInputStream;

    import java.io.FileNotFoundException;

    import java.io.IOException;

    import java.io.InputStream;

    import java.io.InputStreamReader;

    import java.io.UnsupportedEncodingException;

    import java.util.ArrayList;

    import java.util.List;

    import org.jdom2.Document;

    import org.jdom2.Element;

    import org.jdom2.JDOMException;

    import org.jdom2.input.SAXBuilder;

    public class CompareTest {

    public static void main(String args[]){

    read read = new read();

    new Thread(read, "线程1").start();

    new Thread(read, "线程2").start();

    new Thread(read, "线程3").start();

    new Thread(read, "线程4").start();

    new Thread(read, "线程5").start();

    //List list = read.readXML();

    //for(String s:list){

    //System.out.println(s);

    //}

    }

    }

    class read implements Runnable{

    @Override

    public void run() {

    File f = new File("d:"+File.separator+"comparetest");

    File[] filePaths = f.listFiles();

    List filePathsList = new ArrayList<>();

    for(File s:filePaths){

    filePathsList.add(s);

    }

    //解析xml

    SAXBuilder builder = new SAXBuilder();

    List xmlList = new ArrayList<>();

    for(int i=0;i

    synchronized(this){

    try {

    Thread.sleep(300);

    } catch (InterruptedException e2) {

    // TODO Auto-generated catch block

    e2.printStackTrace();

    }

    try {

    InputStream is = new FileInputStream(filePathsList.get(i));

    System.out.println("当前使用的线程是:"+Thread.currentThread().getName()+",正在读文件:"+filePathsList.get(i)+",列表当前长度:"+filePathsList.size());

    Document doc = builder.build(is);

    Element root = doc.getRootElement();

    List list = root.getChildren();

    for(Element e:list){

    xmlList.add(e.getChildTextTrim("ERROR_FEEDBACK_ID"));

    }

    xmlList.add("--------------------------");

    } catch (JDOMException | IOException e1) {

    // TODO Auto-generated catch block

    e1.printStackTrace();

    }

    }

    }

    }

    //public synchronized List readXML(){

    //

    }

    //return xmlList;

    //}

    }

    ------解决方案--------------------

    new Thread(read, "线程1").start();

    new Thread(read, "线程2").start();

    new Thread(read, "线程3").start();

    new Thread(read, "线程4").start();

    new Thread(read, "线程5").start();

    这几个线程执行顺序我们是无法控制的,线程并发也是无法避免的。要实现你的功能那就只有一个办法让这5个线程之间有一个共识,就是让他们都知道除他之外的线程是否已经对某个文件进行了读取操作,如果已读取就不再读了。这就要用到线程之间的通信来完在。这里最好的办法就是定义一个全局变量,当一个线程一开始读取文件就把这个文件名信息存入这个全局变量中,别的线程读取时来判断一下那文件是否己经存到了全局变量中,如果已存在就不在讯取这个文件了。大体思路是这样的。所以你这个代码就得改一下在main中建一个全局变量LIST,然后把这个LIST传进这5个线程中来达到效果,当然也可以把list设成static这个好做一些。需要注意的是在每个线程中需要给这个全局的list加上线程锁,当任意一个线程对list进行操作时,让其他线程都处理等待状态。

    ------解决方案--------------------

    上面代码还有个小bug,如下是在你基础上进行最小改动的

    public class CompareTest {

    public static void main(String args[]) {

    read read = new read();

    new Thread(read, "线程1").start();

    new Thread(read, "线程2").start();

    new Thread(read, "线程3").start();

    new Thread(read, "线程4").start();

    new Thread(read, "线程5").start();

    }

    }

    class read implements Runnable {

    List filePathsList = new ArrayList();

    int index = 0;

    public read() {

    File f = new File("d:" + File.separator + "tmp");

    getFileList(f);

    }

    private void getFileList(File f) {

    File[] filePaths = f.listFiles();

    for (File s : filePaths) {

    if (s.isDirectory()) {

    getFileList(s);

    } else {

    if (-1 != s.getName().lastIndexOf(".xml")) {

    filePathsList.add(s);

    }

    }

    }

    }

    @Override

    public void run() {

    File file = null;

    while (index 

    synchronized (this) {

    if (index >= filePathsList.size()) {

    continue;

    }

    file = filePathsList.get(index);

    index++;

    }

    // 解析xml

    SAXBuilder builder = new SAXBuilder();

    List xmlList = new ArrayList();

    展开全文
  • Java多线程读取文件

    2021-02-12 10:51:57
    转载:http://www.cnblogs.com/metoy/p/4470418.html前言今天是五一假期第一天,按理应该是...昨天下午朋友跟我聊起,他说有需求,需要把上G的txt文件读取写入到数据库。用普通的io结果自然是OOM了,所以果断用NI...
  • 本人刚参加工作,面试的时候遇四道笔试题,其中就有这道多线程有序读取文件的题目,初看时拿不准,感觉会,又感觉不会。于是放弃了这道题,今天闲下来好好做一遍。//定义一runnable接口的实现类import java.io....
  • 让我们再举一例子,它与你的类似,但实际上可以提供一些好处:假设我想在一巨大的单词列表中搜索某个单词的出现(这列表甚至可能来自一磁盘文件,但是像我一样说,由一个线程读取).假设我可以像你的例子一样使用3...
  • 分段处理,计算出每个线程读取文件的开始与结束位置(文件大小/线程数)*N,N是指第几线程,这样能得到每线程在读该文件的大概起始位置使用"大概起始位置",作为读文件的开始偏移量(fileChannel...
  • What is an efficient way for a Java multithreaded application where many threads have to read the exact same file (> 1GB in size) and expose it as an input stream? I've noticed that if there are m....
  • #include#include#include#include#include#include#defineTHREAD_NUM25typedefstruct{FILE*_fp;...//第几个线程sem_t*_semLock;}IDD_THREAD_PARAM;void*ThreadFunc(void*args){charsLine[100+1];FI...
  • 1.主要知识点 2.实验代码 public class xuehao extends Thread { public void run(String a) { for(int i=0;...编写实验代码(分3个文件写) 代码如上 4.观察实验结果 输出班级30次 输出学号30次 输出姓名30次
  • 小编典典我同意@aix,multiprocessing绝对是要走的路。...考虑以下内容(input /是一包含来自Gutenberg项目的.txt文件的目录)。import os.pathfrom multiprocessing import Poolimport sysimport time...
  • I am currently pulling .txt files from the path list of FileNameList, which is working. But my main problem is, it is too slow when the files is too many.I am using this code to print list of txt file...
  • 多线程读取个文件,然后写到另外一个文件中的Java实现。关注:74答案:3mip版解决时间 2021-01-31 19:55提问者嗿恋仯囡2021-01-30 20:23求多线程读取个文件,然后写到另外一个文件中的Java实现。最佳答案二级...
  • 但线程中readlines()就已经全部读完文件了,多线程共同调用同一个文件对象的io方法会造成偏移量错误的问题,你需要锁。(python3 有 os.pread 函数,这个是原子操作,可以不用锁)。这个问题使用线程的效率价值在...
  • //逐行读取本地文件 List dataList = new ArrayList();//File f = new File("D:\\a\\b\\in.txt"); File f = newFile(localFilePath); InputStreamReader reader= new InputStreamReader(new FileInputStream(f), ...
  • springboot项目开启多线程启动类加注解开启 @EnableAsync,实现类方法加注解 @Async前端页面报错信息java.io.FileNotFoundException: C:\Users\dongao\AppData\Local\Temp\tomcat.1255209411477782290.8051\work\...
  • 我一直在努力改进它,以便它处理一csv文件,并在每个线程中保留头,这样每个线程都可以输出一单独的、格式正确的csv文件。不幸的是,我不能这样做,因为它从随机位置(行)读取,这意味着它可能从行的中间读取,我会把行...
  • } } 2、编写一测试类执行多线程 package com.toycloud.awaken.platform; import com.toycloud.awaken.platform.service.AsyncService; import org.junit.Test; import org.junit.runner.RunWith; import org....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 477,708
精华内容 191,083
关键字:

多线程读取多个文件

友情链接: Project1.rar