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