2 u010775468 u010775468 于 2016.05.05 16:09 提问

新人写的关于一个比对文件差异的代码

public class Compare {
LinkedList list1 = new LinkedList();//用来存放文件夹的绝对路径
LinkedList list2 = new LinkedList();//用来存放文件的绝对路径
public void files(String filename) throws IOException
{ //定义一个files方法,这个方法用来把对应路径下的文件夹遍历

    File  file = new File("filename");
    File[] file1 = file.listFiles();//存放的是一级目录下的文件以及文件夹
    for(int i = 0;i < file1.length;i++) 
    {
        if (file1[i].isDirectory())             
            list1.add(file1[i]);//如果是文件夹就加到list1中
        else
            list2.add(file1[i]); //如果是文件的话,就加到list2中,
     }
    File tmp;
    while(!list1.isEmpty()){       //判断list1是否为空,如果为空的话,表示所给的文件路径下只有一个文件
        tmp =(File) list1.removeFirst(); // 把存放一级目录下的第一个文件的路径给tmp
        if(tmp.isDirectory())          //判断这个路径是不是一个文件
        {
            file1 = tmp.listFiles();    //如果是一个文件的话,把这个文件下的(第三级目录)中的文件和文件夹的路径给file1数组

            if(file1 == null)               //如果这个数组为空,即这个文件夹下是空的,那么结束本次循环,然后继续找到链表的第二个(现为第一个)
                continue;
            for(int i = 0;i < file1.length;i++)
            {
                if(file1[i].isDirectory())          //遍历现在的file数组,此时存放的是原来链表第一个元素路径名下的所有文件和文件夹
                    list1.add(file1[i]);
                else
                    list2.add(file1[i]);    
            }   
        }
        else
            list2.add(tmp);  //这个和第一个if相对应,即如果这个目录下存的是文件的话,直接加到list2链表中   
    }   
}
public void loadfile() throws IOException{   //此处定义一个方法,这个方法是遍历list2链表,即存放所有文件的路径的链表
    while(!list2.isEmpty()){
    File tmp =(File)list2.removeFirst();  //获得第一个元素
    File f = new File("tmp");
    FileInputStream files = new FileInputStream(f);  //定义一个文件输出流
    String read = null ;  //声明一个字符串read,用来存放从文件里读到的所有数据,这里如果不初始化的话会报错
    for(int j = 0;j < f.length();j++)
    {
        read = String.valueOf(files.read());
    }
    String [] lines = read.split("\n");  //定义一个行数组,用来存放每一行的数据;
    files.close();
    }
}

}

这里遇到一个瓶颈,是这样的,我的比对思想是把文件夹得目录存到list1中,把文件的属性存到list2中,这个是方法files干的活,然后我得比较文件的差异,于是loadfile这个方法就先从list2这个存放了文件路径的链表开始遍历,然后最后把链表里第一个元素(也即是第一个文件)里的内容放到一个lines数组里(这个比对思想是按行比较),但是问题就来了,那么被比对的另外一个文件该怎么办呢,这个lines数组每循环一次就会被更新一次,这个该怎么办呢
拜托了,各位

1个回答

w172087242
w172087242   Ds   Rxr 2016.05.05 16:49
已采纳

建议问文件摘要对比文件的差异,不同文件的摘要是不同的,摘要可以生成md5的串,每个文件存一个md5就可以,
不用把文件内容都存储下来

文件夹进行遍历就可以了,这里只是提一个思路。

w172087242
w172087242 回复键盘手C: 嗯,如果有帮助,记住结帖哦...
一年多之前 回复
u010775468
u010775468 哦哦,谢谢,我试试
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!