例子 比较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 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行错误.想好好久实在没办法,求高手一定赐教.
你有代码是么[email protected]
谢谢[email protected]
我实在没办法了.
这里可以下载。
java写的,代码量不大。
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;
}
}费了好长时间的力气,要给分哦!
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的一百万行中扫描一次?