用多线程不断的读取同一文件夹下的文件

来源:互联网 发布:广告公司作图软件 编辑:程序博客网 时间:2024/06/08 00:40

1  读取文件,并把文件分成四个list中去,启动四条线程

package com.odin.itms;import java.io.File;import java.util.ArrayList;import java.util.Collection;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import org.apache.commons.io.FileUtils;/** *@Description: *@author:zt *@date:2017-7-27 *version:1.0 */public class ReadFile implements Runnable{@Overridepublic void run() {//不断的读取文件,并把文件分成四个list中去,然后启动四条线程运行程序while(true){File file=new File("F:\\ftp_sthy\\send\\23");if(!file.isDirectory()){continue;}Collection<File> allFile = FileUtils.listFiles(file,new String[] { "JPG", "jpg" }, true);ArrayList<File> fileList1 = new ArrayList<File>();ArrayList<File> fileList2 = new ArrayList<File>();ArrayList<File> fileList3 = new ArrayList<File>();ArrayList<File> fileList4 = new ArrayList<File>();WriteFile.total=0;if (!allFile.isEmpty()) {int index = 0;for (File f : allFile) {if (index == 0) {fileList1.add(f);index = 1;} else if (index == 1) {fileList2.add(f);index = 2;} else if (index == 2) {fileList3.add(f);index = 3;} else if (index == 3) {fileList4.add(f);index = 0;}}}ExecutorService es=Executors.newCachedThreadPool();WriteFile wf1=new WriteFile(fileList1,"1");WriteFile wf2=new WriteFile(fileList2,"2");WriteFile wf3=new WriteFile(fileList3,"3");WriteFile wf4=new WriteFile(fileList4,"4");es.execute(wf1);es.execute(wf2);es.execute(wf3);es.execute(wf4);//如果这一次读取的所有文件被删除后,才可以进入下一次读取文件while(true){
try {Thread.sleep(10);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println(WriteFile.total+"====="+allFile.size());if(WriteFile.total==allFile.size()){System.out.println("-----------------");break;}}}}}

2 获取文件信息并删除

package com.odin.itms;import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.util.List;import javax.imageio.stream.FileImageInputStream;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** *@Description: *@author:zt *@date:2017-7-27 *version:1.0 */public class WriteFile implements Runnable{private static final Logger logger = LoggerFactory.getLogger(WriteFile.class);private List<File> allFile;private String name;public static int total=0;public WriteFile(List<File> allFile,String name){this.allFile=allFile;this.name=name;}@Overridepublic void run() {for(File f:allFile){if(f.length()>0){String fileName=f.getName();try {FileInputStream fr=new FileInputStream(f);BufferedInputStream br=new BufferedInputStream(fr);byte[] b=new byte[(int) f.length()];int i=br.read(b);FileOutputStream fw=new FileOutputStream(new File("F:\\ftp_sthy\\send\\24\\"+fileName));fw.write(b,0,b.length);fw.flush();if(fw!=null){fw.close();}if(br!=null){br.close();}if(fr!=null){fr.close();}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}f.delete();total++;logger.info("线程"+name+" 成功写入文件,文件名为:"+fileName);}}}}

3 测试类

package com.odin.itms;import org.apache.log4j.PropertyConfigurator;/** *@Description: *@author:zt *@date:2017-7-27 *version:1.0 */public class clientMain {/** * @param args */public static void main(String[] args) {PropertyConfigurator.configure("conf/log4j.properties");ReadFile rf=new ReadFile();Thread thread=new Thread(rf);thread.start();}}

原创粉丝点击