例子 比较A,B两个文件A 文件5行   B文件7行
1 a        1 a
2 b        2 b
3 c        3 m
4 d        4 n
5 e        5 c
           6 d
           7 z我希望比较后的结果A相对与B, 第5行错误.
B相对于A,3,4,7行错误.想好好久实在没办法,求高手一定赐教.

解决方案 »

  1.   

    liaoyi_ipanel  你好
    你有代码是么[email protected]
    谢谢[email protected]
      

  2.   

    liaoyi_ipanel 如果有一定请帮忙..
    我实在没办法了.
      

  3.   

    http://www.incava.org/projects/java/java-diff/download.html
    这里可以下载。
    java写的,代码量不大。
      

  4.   


    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    public class CompareFile {


    public List<LineInfo> readFile(File file) throws IOException {
    List<LineInfo> list = new ArrayList<LineInfo>();
    //File file = new File(fileName);
    BufferedReader br = new BufferedReader(new FileReader(file));
    //记录行数
    int i = 0;
    String str ;
    while ((str = br.readLine()) != null) {
    if (!"".equals(str)) {
    i = i + 1;
    LineInfo info = new LineInfo();
    info.setRowNum(i);
    info.setRowContent(str);
    //System.out.println(info.getRowNum()+"行"+info.getRowContent());
    list.add(info);
    }
    }
    return list;
    }
    /**
     * B相对于A
     * @param fileA A文件
     * @param fileB B文件
     * @return 
     */
    public List<LineInfo> bCompareA(File fileA,File fileB) {
    try {
    List<LineInfo> file1Info = readFile(fileA);
    List<LineInfo> file2Info = readFile(fileB);
    List<LineInfo> result = new ArrayList<LineInfo>();
    for (LineInfo b : file2Info) {
    boolean flag = false;
    for(int i = 0;i < file1Info.size(); i ++) {

    if (file1Info.get(i).getRowContent().equals(b.getRowContent()))
    flag = true;

    if (!flag && i == (file1Info.size()-1))
    result.add(b);
    }
    }
    return result;
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();

    return null;
    }

    /**
     * A相对于B
     * @param fileA A文件
     * @param fileB B文件
     * @return 
     */
    public List<LineInfo> aCompareB(File fileA,File fileB) {
    try {
    List<LineInfo> file1Info = readFile(fileA);
    List<LineInfo> file2Info = readFile(fileB);
    List<LineInfo> result = new ArrayList<LineInfo>();
    for (LineInfo a : file1Info) {
    boolean flag = false;
    for(int i = 0;i < file2Info.size(); i ++) {
    if (file2Info.get(i).getRowContent().equals(a.getRowContent())) {
    System.out.println(flag);
    flag = true;
    }

    if (!flag && i == (file2Info.size()-1)) 
    result.add(a);
    }
    }
    return result;
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();

    return null;
    }

    public static void main(String [] args) throws IOException {
    CompareFile cf = new CompareFile();
    File a = new File("D:\\a.txt");
    File b = new File("D:\\b.txt");
    /*cf.readFile(a);
    cf.readFile(b);*/
    List<LineInfo> a2b = cf.aCompareB(a, b);
    if (a2b != null) {
    for(LineInfo li : a2b) {
    System.out.println(li.getRowNum()+"行"+li.getRowContent());
    }
    }
    }
    }class LineInfo {
    public LineInfo() {

    }
    //行号
    private int rowNum;
    //行内容
    private String rowContent;

    public int getRowNum() {
    return rowNum;
    }
    public void setRowNum(int rowNum) {
    this.rowNum = rowNum;
    }
    public String getRowContent() {
    return rowContent;
    }
    public void setRowContent(String rowContent) {
    this.rowContent = rowContent;
    }


    }费了好长时间的力气,要给分哦!
      

  5.   

    for (LineInfo b : file2Info) {
                    boolean flag = false;
                    for(int i = 0;i < file1Info.size(); i ++) {
                        
                        if (file1Info.get(i).getRowContent().equals(b.getRowContent()))
                            flag = true;
                        
                        if (!flag && i == (file1Info.size()-1))
                            result.add(b);
                    }
                }
    这种代码也敢拿出来.如果每个文本有一百万行,
    读A的每一行都要在B的一百万行中扫描一次?