比较2 * .txt文件并打印它们之间的差异

时间:2016-12-16 10:52:14

标签: java file printing compare difference

我在编写比较两个文件的代码时遇到了问题(第一个参考文件):

       PROTOCOL STATE SERVICE
       1        open  icmp
       6        open  tcp
       17       open  udp

和(执行文件)

      PROTOCOL STATE  SERVICE
      1        open   icmp
      6        open   tcp
      17       open   udp
      255      closed unknown

并在新文件中保存这两个文件之间的差异(255封闭未知)。

为了比较,我使用了以下代码,但它似乎不起作用。

public String[] compareResultsAndDecide(String refFile, String execFile) throws IOException {

    String[] referenceFile = parseFileToStringArray(refFile);
    String[] execCommand = parseFileToStringArray(execFile);
    List<String> tempList = new ArrayList<String>();


    for(int i = 1; i < execCommand.length ; i++)
    {
        boolean foundString = false; // To be able to track if the string was found in both arrays
        for(int j = 1; j < referenceFile.length; j++)
        {
            if(referenceFile[j].equals(execCommand[i]))
            {
                foundString = true; 
                break; // If it exist in both arrays there is no need to look further
            }
        }
        if(!foundString) // If the same is not found in both..
            tempList.add(execCommand[i]); // .. add to temporary list
    }



    String diff[] = tempList.toArray(new String[0]);


    if(diff != null)  {

                    return diff;
    }

对于字符串refFile,我会使用/home/xxx/Ref.txt路径来引用文件。对于execFile(显示的第二个文件)也是如此。 有人可以帮我这个吗?

添加,我正在使用解析文件到字符串数组:

public String[] parseFileToStringArray(String filename) throws FileNotFoundException {
    Scanner sc = new Scanner(new File(filename));
    List<String> lines = new ArrayList<String>();
    while (sc.hasNextLine()) {
                    lines.add(sc.nextLine());
    }
    String[] arr = lines.toArray(new String[0]);
    return arr;
}

3 个答案:

答案 0 :(得分:1)

int i = 1更改为int i = 0,将int j = 1更改为int j = 0

答案 1 :(得分:0)

您的compareResultsAndDecide方法必须更改为:

public static String[] compareResultsAndDecide(String refFile, String execFile) throws IOException {

    String[] referenceFile = parseFileToStringArray(refFile);
    String[] execCommand = parseFileToStringArray(execFile);
    List<String> tempList = new ArrayList<String>();

    List<String> diff = new ArrayList(Arrays.asList(execCommand));
    diff.removeAll(Arrays.asList(referenceFile));
    String[] toReturn = new String[diff.size()];
    toReturn = diff.toArray(toReturn);
    return toReturn;
}

和你的parseFileToStringArray类似:

    public String[] parseFileToStringArray(String filename) throws FileNotFoundException {
        Scanner sc = new Scanner(new File(filename));
        List<String> lines = new ArrayList<String>();
        while (sc.hasNextLine()) {
            lines.add(sc.nextLine());
        }
        String[] arr = new String[lines.size()];
        return lines.toArray(arr);
    }

答案 2 :(得分:0)

问题出在您的.txt文件中。您的编码必须不同。

我知道这不是最好的方法,但是如果你使用replaceAll()方法替换文本文件行中的空格,那么你的代码应该可行。但不幸的是,你会错过行之间的空格

变化:

String[] arr = lines.toArray(new String[0]);

要:

String[] arr = lines.toArray(new String[0]).replaceAll(" ", "");

注意:

  1. 我尝试使用trim(),但对我来说效果不佳。
  2. 如上所述,数组元素从0开始,而不是从1开始。改变它。