实现高效的文件内容比较工具函数。 参考了网上的一些方法并做了改进。 测试发现使用MD5方式比较是不完备的,如果文件只改动一个字节,比如 本来数字“1”改成数字“2”,是无法正确比较的。 所以还是采用了读取所有字节进行比较的方式比较靠谱。读取文件内容是的buffer大小会影响执行效率。对于10K级别的文本文件,经测试在10MS以内比较完成。 /** * <p> * compare two file's content. if not equal then return false; else return true; * </p> * @param oldFilePath * @param newFilePath * @return */ public static boolean isFileContentEqual(String oldFilePath, String newFilePath) { //check does the two file exist. if (!TextUtils.isEmpty(oldFilePath) && !TextUtils.isEmpty(newFilePath)) { File oldFile = new File(oldFilePath); File newFile = new File(newFilePath); FileInputStream oldInStream = null; FileInputStream newInStream = null; try { oldInStream = new FileInputStream(oldFile); newInStream = new FileInputStream(newFile); int oldStreamLen = oldInStream.available(); int newStreamLen = newInStream.available(); //check the file size first. if (oldStreamLen > 0 && oldStreamLen == newStreamLen) { //read file data with a buffer. int cacheSize = 128; byte[] data1 = new byte[cacheSize]; byte[] data2 = new byte[cacheSize]; do { int readSize = oldInStream.read(data1); newInStream.read(data2); for (int i = 0; i < cacheSize; i++) { if (data1[i] != data2[i]) { return false; } } if (readSize == -1) { break; } } while (true); return true; } } catch (Exception e) { e.printStackTrace(); } finally { //release the stream resource. try { if (oldInStream != null) oldInStream.close(); if (newInStream != null) newInStream.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } return false; }
参考了文章:java比较文件内容是否相同的方法
相关推荐
1. **按字节读取文件内容** Java中`java.io.FileInputStream`类提供了按字节读取文件的功能。这种方法适用于读取二进制文件,例如图像、音频或视频文件。下面的代码示例展示了如何按字节读取文件: ```java ...
java读取txt文件,可以以文件路径构造这个流,:FileInputStream fin = new FileInputStream("d:/test.txt"); 然后使用这个流直接读取到文件,再使用reader构造BufferedReader,按行读取一整行的文本,作为字符串返回...
里面包含了高效处理文件流的一个java文件,工作时总会用到 个人原创 请使用者标明作者信息 谢谢 oneRose 奉献(下载后的朋友们给点意见 谢谢)
总之,Java文件对比工具是开发者不可或缺的辅助工具,它们通过提供高效且直观的方式来比较和合并文件,极大地提高了开发效率和代码质量。在选择或实现这类工具时,应根据实际需求考虑其功能、性能和易用性。
总结来说,通过Java和Apache POI,我们可以实现两个Word文档的高效比较和差异标记。在实践中,需要根据具体需求调整和优化代码,以满足各种复杂场景。对于大型或格式复杂的文档,建议使用专门的比较库以提升效果和...
"Java去重txt文件内容(按行)"这个主题涉及到如何利用Java语言有效地读取TXT文件,并通过比较两份文件的内容来消除重复的行。在这个过程中,Java 8引入的新特性——流(Stream)和并行流(Parallel Stream)起到了关键...
对于内容比较,可以使用`java.nio.file.Files`的`readAllBytes()`方法读取文件内容,然后进行字节对齐比较。如果文件较大,可以采用分块读取并比较的方法。 3. **Socket通信**: Java的`java.net.Socket`和`...
在Java中,写入大数据文件通常需要考虑文件的大小、写入速度、内存占用等因素,以确保写入操作的高效性和可靠性。 在给定的Java代码中,我们可以看到,程序首先定义了写入文件的路径、切分文件的路径、数据的个数、...
"JAVA高效读取大文件" 概述:本文将讨论如何使用 Java 高效地读取大文件,解决读取大文件时可能遇到的 OutOfMemoryError 异常问题。同时,文章还将介绍使用 Guava 和 Apache Commons IO 库来读取大文件的不同方法,...
Java的文件比较是一个重要的开发任务,特别是在版本控制和代码审查中。DiffUtils-1.2.1.jar 是一个专门用于这个目的的Java库,它提供了高效且灵活的文本和对象的差异计算。这个库是开源的,允许开发者在Java应用程序...
在按顺序读取文件时,通常我们会先创建一个`FileReader`对象,然后将其传递给`BufferedReader`,以便高效地逐行读取文件内容。 以下是一个简单的示例,展示如何使用`BufferedReader`按顺序读取文件: ```java ...
本文将深入探讨如何在Java中实现动态修改配置文件,同时解决中文字符编码问题,使得配置文件的读写更加高效和便捷。 首先,我们需要理解Java中的Properties类,它是处理配置文件的标准工具。`java.util.Properties`...
在Java编程中,复制文件的方法有很多,而且经常要用到。我以前一直是缓冲输入输出流来实现的(绝大多数人都是如此),近来在研究JDK文档时发现,用文件通道(FileChannel)来实现文件复制竟然比用老方法快了近三分之...
首先,我们需要理解文件预览的基本原理:用户通过浏览器发送请求到服务器,服务器处理请求并返回文件内容,然后在浏览器中以适合的方式展示这些内容。为了实现这一过程,我们需要考虑以下几个关键步骤: 1. **文件...
- 通过`readLine()`方法逐行读取文件内容,该方法会返回一行字符串,如果没有更多的行则返回`null`。 - 如果某行包含指定的字符串,则输出该行内容。 5. **异常处理**: - 通过`try-catch`结构处理可能出现的...
综上所述,实现"java重复文件查找"程序涉及的知识点包括文件I/O操作、文件内容比较、多线程、用户界面设计、任务管理、文件过滤、结果展示以及效率优化等。理解并熟练掌握这些知识点对于进行复杂的Java应用开发具有...
传统的逐行读取文件的方法可能会消耗大量内存,因为整个文件内容会被加载到内存中。为了避免这种问题,我们可以采用流式处理(Streaming)来高效地计算文件的行数。 以下是一种使用Java进行大文件行数计数的优化...
2. **读取TXT文件**:使用Java的`BufferedReader`类读取TXT文件内容,并将其存储到一个字符串变量中。 ```java String content = ""; try (BufferedReader reader = new BufferedReader(new FileReader("input....
这样,静态文件请求可以被高效地处理,而Java服务器专注于处理动态内容。 "通用静态页面生成系统(Engineer) v.1"可能是一个用于生成静态HTML页面的工具。这样的系统通常适用于内容管理系统(CMS),它能够预先渲染...
服务器需要创建一个数据库连接,使用PreparedStatement预编译SQL语句,然后将接收到的文件内容插入到BLOB(Binary Large Object)类型的字段中。 6. **异常处理**:在整个文件上传过程中,必须充分考虑并处理可能...