用多线程不断的读取同一文件夹下的文件
来源:互联网 发布:广告公司作图软件 编辑:程序博客网 时间: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();}}
阅读全文
0 0
- 用多线程不断的读取同一文件夹下的文件
- 同一文件夹下的所有文件批处理命名
- 同一文件夹下.py调用另一个.py文件的函数
- 用python读取文件夹下所有文件并写进同一文件
- matlab批量读取同一目录下的txt文件
- VC读取文件夹下的所有文件
- 读取某一文件夹下的所有文件
- VC++读取文件夹下的所有文件
- Android读取Assets文件夹下的文件
- 读取文件夹下的所有文件
- 读取文件夹下的文件列表
- 读取文件夹下所有的文件
- 读取Asset文件夹下的Json文件
- 读取文件夹下的所有文件
- 读取某个文件夹下的所有文件
- 读取某个文件夹下的所有文件
- 读取文件夹下的所有文件
- 读取一个文件夹下的所有文件
- 解决MySQL插入中文字符乱码问题
- JS_利用图片的二进制流展示图片
- 动态顺序表-c语言实现
- 获取时间最简单的方式
- 冗余 和 容错 的区别
- 用多线程不断的读取同一文件夹下的文件
- xml五个特殊字符的转义
- CEF JavaScript和Cpp交互示例(Custom Implementation)
- iOS:DES加密iOS和Android的匹配
- A strange lift
- 坚持做创业护卫队的770天
- 什么是服务降级?
- Linux用户抢占和内核抢占详解(概念, 实现和触发时机)--Linux进程的管理与调度
- Makefile详解(六)