日期:2014-05-20 浏览次数:20899 次
package testNew; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; public class Test { public final static Map<String,String> fileMap = new HashMap<String,String>(); public final static String readFileName = "D:" + File.separator + "hello"; public final static String writeFileName = "D:" + File.separator + "back"; public static void main(String[] args) { ReadThread read = new ReadThread(); WriteThread write = new WriteThread(); read.start(); write.start(); } /** *返回目录下文件 */ public static List<String> printfFile(String fileName){ File file = new File(fileName); String[] fileList = file.list();//获得该目录下所有文件的名字,包含隐藏文件 for(String s : fileList){ System.out.println(s); } return Arrays.asList(fileList); } /** *拷贝文件 */ public static void copyFile(String fileName,String fileName1) throws IOException { File file = new File(fileName); File file1 = new File(fileName1); FileInputStream fileStream = new FileInputStream(file); FileOutputStream fileOutStream = new FileOutputStream(file1); byte[] byteArray = new byte[1024]; int temp = 0; while((temp = fileStream.read(byteArray))!=-1){ fileOutStream.write(byteArray, 0, temp); } fileStream.read(byteArray); fileStream.close(); fileOutStream.close(); } } class ReadThread extends Thread{ public void run() { while(true){ List<String> readList = Test.printfFile(Test.readFileName); for(String str : readList){ if(Test.fileMap.containsKey(str)){ continue; } else Test.fileMap.put(str, str); } try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } } } } class WriteThread extends Thread{ public void run() { while(true){ try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } List<String> writeList =Test.printfFile(Test.writeFileName); for(Iterator it = Test.fileMap.keySet().iterator();it.hasNext();){ String key = (String)it.next(); boolean flag = false; for(String str : writeList){ if(str.equalsIgnoreCase(key)){ flag = true; break; } } if(!flag){ try { Test.copyFile(Test.readFileName + File.separator + key,Test.writeFileName + File.separator + key); } catch (IOException e) { e.printStackTrace(); } } } } } }
------解决方案--------------------
基本逻辑是这样的,楼主发现问题,或者可以根据自己需求自己改一改。
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.HashSet;
import java.util.Set;
public class FilesListener implements Runnable{
private String fileDir = "d://from";
private String newFileDir = "d://to";
private Set<String> oldFiles = new HashSet<String>();
public FilesListener(){
File[] files = new File(fileDir).listFiles();
if(files != null){
for(File file : files){
oldFiles.add(file.getName());
}
}
}
private Set<String> checkNewFiles(){
Set<String> nowFiles = new HashSet<String>();
File[] files = new File(fileDir).listFiles();
if(files != null){
for(File file : files){
nowFiles.add(file.getName());
}
}
if(nowFiles.size() > oldFiles.size()){
Set<String> addFiles = new HashSet<String>();
addFiles.addAll(nowFiles);
addFiles.removeAll(oldFiles);
oldFiles.addAll(addFiles);
return addFiles;
}
return null;
}
private void copyFiles(Set<String> addFiles) {
for (String file : addFiles) {
try {
String oldFileName = fileDir + "//" + file;
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(oldFileName));
String newFileName = newFileDir + "//" + file;
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newFileName));
byte[] buf = new byte[1024];
int read = -1;
while((read = bis.read(buf)) > 0){
bos.write(buf,0,read);
}
bos.close();
bis.close();
System.out.println("复制文件:" + file);
}
catch (Exception e) {
e.printStackTrace();
}
}
}
public void run() {
Set<String> addFiles = checkNewFiles();
if (addFiles != null) {
copyFiles(addFiles);
}
try {
Thread.sleep(3000);
run();
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
FilesListener fl = new FilesListener();
new Thread(fl).start();
}
}