首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Eclipse开发 >

java 怎么比较两个文件夹内的文件并取出修改过的文件

2012-01-02 
java 如何比较两个文件夹内的文件并取出修改过的文件现有文件夹二1.D:\\OLD\\LOOK2. D:\\NEW\\LOOK欲比较

java 如何比较两个文件夹内的文件并取出修改过的文件
现有文件夹二
  1.D:\\OLD\\LOOK
  2. D:\\NEW\\LOOK
欲比较俩LOOK中是否有文件操作(增删改)
并将增改的文件取出存入D:\\CHECKED\\LOOK
并将需要删除的文件写入DELETE.TXT存放至D:\\CHECKED\\LOOK下
求高手  


[解决办法]

Java code
import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import java.util.ArrayList;import java.util.List;public class TestFile {    /**     * @param args     */    public static void main(String[] args) {        File folderOld = new File("C:/testF/OLD");        File folderNew = new File("C:/testF/NEW");        File folderLock = new File("C:/testF/LOCK");        File[] fielsOld = folderOld.listFiles();        File[] fielsNew = folderNew.listFiles();        List<File> add = new ArrayList<File>();        List<File> modify = new ArrayList<File>();        List<File> delete = new ArrayList<File>();        for(int i = 0; i < fielsOld.length; i++) {            delete.add(fielsOld[i]);        }        for(int i = 0; i < fielsNew.length; i++) {            int diff = 0;            for(int j = 0; j < fielsOld.length; j++) {                if(fielsNew[i].getName().equals(fielsOld[j].getName())){                    delete.remove(j);                    // modify                    if(fielsNew[i].lastModified() != fielsOld[j].lastModified()) {                        modify.add(fielsNew[i]);                    }                }                else {                    diff++;                }            }            // add            if(fielsOld.length == diff) {                add.add(fielsNew[i]);            }        }        System.err.println(java.util.Arrays.toString(add.toArray()));        System.err.println(java.util.Arrays.toString(modify.toArray()));        System.err.println(java.util.Arrays.toString(delete.toArray()));        if(!folderLock.exists()) {            folderLock.mkdir();        }        File deleteFile = new File(folderLock.getAbsolutePath()                 + File.separatorChar + "DELETE.TXT");        try {            OutputStream out = new FileOutputStream(deleteFile);            for(int i = 0; i < delete.size(); i++) {                out.write((delete.get(i).getAbsolutePath() + "\n").getBytes());            }            out.flush();            out.close();            // put add and modify together.            add.addAll(modify);            for(int i = 0; i < add.size(); i++) {                InputStream in = new FileInputStream(add.get(i));                out = new FileOutputStream(folderLock.getAbsolutePath()                         + File.separatorChar + add.get(i).getName());                byte[] bytes = new byte[512];                while(in.read(bytes) != -1) {                    out.write(bytes);                }                out.flush();                out.close();                in.close();            }        } catch (Exception e) {            e.printStackTrace();        }    }} 

热点排行