我在编写比较两个文件的代码时遇到了问题(第一个参考文件):
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;
}
答案 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(" ", "");
注意:
trim()
,但对我来说效果不佳。0
开始,而不是从1
开始。改变它。