对于当前java 文件比较 diffutils-1.2.1.jar 的使用和修改

来源:互联网 发布:淘宝店什么最好卖 编辑:程序博客网 时间:2024/09/21 06:18

我们项目需要做文件比较处理,从网上下载了diffutils-1.2.1.jar,总的来说该文件比较还算正确,但有不足的地方,新的文件和原来的文件若有不同,不能反应是inset和delete,返回的类型全部都是change,我对它进进了封装,并测试了大量的文件,都还不错,具体的修改后的代码如下:

public class CompareListUtils {public static final String Result_EQUAL = "EQUAL";public static final String Result_INSERT = "INSERT";public static final String Result_DELETE = "DELETE";public static final String Result_CHANGE = "CHANGE";/*** *  * @param filename * @return */private static List<String> fileToLines(String filename) {List<String> lines = new LinkedList<String>();String line = "";try {BufferedReader in = new BufferedReader(new FileReader(filename));while ((line = in.readLine()) != null) {lines.add(line);}} catch (IOException e) {e.printStackTrace();}return lines;}/*** * 对文件进行比较 * INSERT, DELETE, CHANGE, EQUAL * @param fromFileName 原来的文件名 * @param toFileName 新的文件名 */public static List<CompareMo> compareAll(String fromFileName, String toFileName) {List<String> original = fileToLines(fromFileName);List<String> revised = fileToLines(toFileName);final DiffRowGenerator.Builder builder = new DiffRowGenerator.Builder();final DiffRowGenerator dfg = builder.build();final List<DiffRow> rows = dfg.generateDiffRows(original, revised);List<CompareMo> listCompareMo = new ArrayList<CompareMo>();int i=1;int oldSize = original.size();int newSize = revised.size();int insertSize = 0;int deleteSize = 0;for (final DiffRow diffRow : rows) {String tag = diffRow.getTag().toString();String oldLine = diffRow.getOldLine();String newLine = diffRow.getNewLine();if(Result_CHANGE.equals(tag)){boolean isInset = false;if ((i-insertSize) <= oldSize) {if(oldLine!=null&& oldLine.trim().length()==0){if(!original.get(i-1-insertSize).equals(oldLine)){tag = Result_INSERT;isInset = true;insertSize ++;}}}if (!isInset) {if ((i-deleteSize) <= newSize) {if(newLine!=null&& newLine.trim().length()==0){if(!revised.get(i-1-deleteSize).equals(oldLine)){tag = Result_DELETE;isInset = true;deleteSize ++;}}}}}listCompareMo.add(new CompareMo(i, oldLine, newLine, tag));i++;}return listCompareMo;}public static void main(String[] args) {List<CompareMo> compares = CompareListUtils.compareAll("D:/work/WiFiPages/originalFile.txt","D:/work/WiFiPages/newFile.txt");for (CompareMo compare : compares) {System.out.println(compare.getId() + " 结果 :" + compare.getType()+ ":" + compare.getOldText() + "<>" + compare.getNewText());}}}