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

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{
	

	@Override
	public 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 block
					e.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;
	}
	
	@Override
	public 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();
	}

}

猜你喜欢

转载自blog.csdn.net/t0404/article/details/76269119