键盘手C 2016-05-05 08:09 采纳率: 60%
浏览 1064
已采纳

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

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条回答

  • little_how 2016-05-05 08:49
    关注

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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 关于#python#的问题:自动化测试