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: 嗯,如果有帮助,记住结帖哦...
大约 2 年之前 回复
u010775468
u010775468 哦哦,谢谢,我试试
大约 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
通过java编写的可以比对两个文件夹的不同代码
通过java编写的可以比对两个文件夹的不同代码
Git学习教程 Git差异比对
第七课 Git差异比对 内容提要:显示项目的两个不同版本之间的差异,或者显示指定文件的不同之处   在‘git日志’一课中,我们通过'git log -p'命令来显示每一次提交与其父节点提交内容之间快照的差异。这节课介绍的'diff'命令会实现类似的功能---用一种统一的格式来显示两个快照或文件之间的差异。这节课就向你展示如何使用diff命令。 查看变更还未载入(chang
利用TortoiseSVN自动对比文件差异
前言:工作过程中,代码集成经常进行,每次都要对文件进行对比,工作烦琐。利用TortoiseSVN可以快速实现代码自动对比并导出的功能。 一、配置好TortoiseSVN的工作环境。二、在本地工作副本目录,右键菜单选择[TortoiseSVN]à [Show log],弹出log messages对话框。如下图:图1.1 Show log 菜单 图1.2 Log
使用Python实现一个文本对比报告生成工具
借助于difflib的功能,可以针对我们的使用情况进一步进行功能的聚合。我想要的功能是输入两个文件名以及一个输出报告的文件名之后,运行直接给出最终的报告。 代码实现如下:   1 import sys   2 import difflib   3    4 try:   5     file1 = sys.argv[1]   6     file2 = sys.argv[2]  
shell对比文件内容脚本分享
这篇文章主要介绍了shell 对比文件内容脚本,找出两个文件不同的数据,需要的朋友可以参考 复制代码代码如下: #!/bin/sh function _diffab(){ x=0 for i in `cat $1`;do         for j in `cat $2`;do                 if [ $i == $j ];then    
【lizhi125】帮你揪出文档/代码的差异 文档内容差异对比工具-WinMerge中文版
经常写文档或者写程序代码的朋友肯定经常会遇到相似的文档需要比较一下它们的差异。例如在程序代码升级、备份或修改后,想知道新代码与旧代码到底有哪些地方不同;或者你写了几分文稿,反反复复地修改过好几次,你想找回他们具体的差异,但这时想要用肉眼去对比,一行一行地查看无异于逼自己的脑细胞去自杀。其实,我们大可以利用一些专业的对比软件,比如Beyond Compare;但BC是一款商业软件,需要购买。而今天l
Windows下比较两个文件的不同(命令行操作/相关软件)
写在前面 做ACM题目的时候,往往要比较程序输出与样例输出,以确保程序正确性。当样测试样例比较少的时候,直接人工比对就可以了,但当测试数据比较大(上百或更多)的时候,人工检查就容易出错了。 假设现有两个测试文件1381.in和1381.ans,其中1381.in是程序输入文件,1381.ans程序输入对应的正确答案的输出。假设我们将自己编写的程序重定向输出到1381.out文件。那么我们就需要
利用eclipse比较两个文件的代码差异或者一个文件不同版本之间的异同
利用eclipse比较两个文件的代码差异或者一个文件不同版本之间的异同
一个android 文本比对App的实现(一)
做c++开发很多年了,从早年windows vc6.0 做客户端程序开发,这些年后台流媒体服务器后台开发。随着时代变迁,移动互联逐渐兴起,直到现在,移动互联的风头早已盖过传统互联网应用,因而传统后台开发似乎日渐式微。如今要找工作的话,android,IOS等开发的职位不但数量远远多于c++,而且报酬也要比c++高很多,如果在移动开发上做过三年以上,年薪25W以上的机会多的是,但是对于c++ 要达到
Python 实现比较文件内容异同
import sys import difflib import time import os """ 创作时间:2017-10-08 23:30 09 版本: 1.0.0 """ def main(): """主函数""" try: f1 = sys.argv[1]#获取文件名 f2 = sys.argv[2] except Excepti