对于当前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());}}}
- 对于当前java 文件比较 diffutils-1.2.1.jar 的使用和修改
- Java中使用Jar包时读取当前jar文件所在的目录工具
- java文件上传(使用commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar)
- java批量修改Excel文件 使用包jxl.jar
- Java中Ear、Jar、War文件之间的比较
- java-使用jar文件
- 对于Memcache和Java hashMap比较
- 修改文件来得知当前使用的模板
- 【零碎JAVA】使用jar命令创建可执行的jar文件
- 使用JAVA实现比较两个文件夹下的文件新增和修改情况,并复制到新的目录(实现增量更新项目)
- Diffutils打造不一样的recyclerview
- 对于新版Cocoapods文件写法的修改
- 使用jar打包java文件生成可执行的java文件
- 关于java文件导出jar文件的问题,区别开 jar file 和 runnable jar file
- Java(Android)修改jar里面的包名并生成新的jar文件
- 对于HBuilder和appcan的比较
- java 对于文件的操作
- Java对于文件的读写
- Python锁文件实现(其中第二种方法是转载的)
- chsh
- Workflow Save as to Database,Encounter error: 1004: Language is not enabled
- C#执行DOS命令,返回DOS命令的输出
- 简单了解HTTP消息头
- 对于当前java 文件比较 diffutils-1.2.1.jar 的使用和修改
- 使用struts2+spring+tomcat+mysql数据库开发中文乱码问题解决方案
- perl,php程序只运行一个
- Read Image
- AS3.0 性能优化官方文档
- 搜狗输入法,无心插柳柳成荫
- Java 枚举:覆写 toString,再看 equals、hashCode
- Linux 信号机制分析
- POJ 2155 - Matrix