`
jonson
  • 浏览: 168487 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

JAVA高效文件内容比较

    博客分类:
  • java
阅读更多

 

实现高效的文件内容比较工具函数。
参考了网上的一些方法并做了改进。  测试发现使用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比较文件内容是否相同的方法

 

 

2
4
分享到:
评论
3 楼 jonson 2014-11-13  
就是用了它的判空函数而已,直接 判断也是可以的。
oldFilePath != null && oldFilePath.length > 0
2 楼 jonson 2014-11-13  
我的是android的项目,这个类是属于android.jar包的。
1 楼 wangh8 2014-11-12  
TextUtils这个类提示找不到

相关推荐

    java 读取文件 文件读取操作

    1. **按字节读取文件内容** Java中`java.io.FileInputStream`类提供了按字节读取文件的功能。这种方法适用于读取二进制文件,例如图像、音频或视频文件。下面的代码示例展示了如何按字节读取文件: ```java ...

    java读取txt文件内容(java快速读取,程序已调试通)

    java读取txt文件,可以以文件路径构造这个流,:FileInputStream fin = new FileInputStream("d:/test.txt"); 然后使用这个流直接读取到文件,再使用reader构造BufferedReader,按行读取一整行的文本,作为字符串返回...

    高效处理文件流 java文件

    里面包含了高效处理文件流的一个java文件,工作时总会用到 个人原创 请使用者标明作者信息 谢谢 oneRose 奉献(下载后的朋友们给点意见 谢谢)

    java实现两个word文件进行比较

    总结来说,通过Java和Apache POI,我们可以实现两个Word文档的高效比较和差异标记。在实践中,需要根据具体需求调整和优化代码,以满足各种复杂场景。对于大型或格式复杂的文档,建议使用专门的比较库以提升效果和...

    java工具类 ftp 文件比较 socket http

    对于内容比较,可以使用`java.nio.file.Files`的`readAllBytes()`方法读取文件内容,然后进行字节对齐比较。如果文件较大,可以采用分块读取并比较的方法。 3. **Socket通信**: Java的`java.net.Socket`和`...

    Java写入大数据文件

    在Java中,写入大数据文件通常需要考虑文件的大小、写入速度、内存占用等因素,以确保写入操作的高效性和可靠性。 在给定的Java代码中,我们可以看到,程序首先定义了写入文件的路径、切分文件的路径、数据的个数、...

    JAVA高效读取大文件[参考].pdf

    "JAVA高效读取大文件" 概述:本文将讨论如何使用 Java 高效地读取大文件,解决读取大文件时可能遇到的 OutOfMemoryError 异常问题。同时,文章还将介绍使用 Guava 和 Apache Commons IO 库来读取大文件的不同方法,...

    java的文件比较 diffutils-1.2.1.jar

    Java的文件比较是一个重要的开发任务,特别是在版本控制和代码审查中。DiffUtils-1.2.1.jar 是一个专门用于这个目的的Java库,它提供了高效且灵活的文本和对象的差异计算。这个库是开源的,允许开发者在Java应用程序...

    java 按顺序读取文件

    在按顺序读取文件时,通常我们会先创建一个`FileReader`对象,然后将其传递给`BufferedReader`,以便高效地逐行读取文件内容。 以下是一个简单的示例,展示如何使用`BufferedReader`按顺序读取文件: ```java ...

    java高效文件复制.txt

    在Java编程中,复制文件的方法有很多,而且经常要用到。我以前一直是缓冲输入输出流来实现的(绝大多数人都是如此),近来在研究JDK文档时发现,用文件通道(FileChannel)来实现文件复制竟然比用老方法快了近三分之...

    利用java后端实现文件在线预览

    首先,我们需要理解文件预览的基本原理:用户通过浏览器发送请求到服务器,服务器处理请求并返回文件内容,然后在浏览器中以适合的方式展示这些内容。为了实现这一过程,我们需要考虑以下几个关键步骤: 1. **文件...

    JAVA读取指定文件里面的指定内容

    - 通过`readLine()`方法逐行读取文件内容,该方法会返回一行字符串,如果没有更多的行则返回`null`。 - 如果某行包含指定的字符串,则输出该行内容。 5. **异常处理**: - 通过`try-catch`结构处理可能出现的...

    java重复文件查找

    综上所述,实现"java重复文件查找"程序涉及的知识点包括文件I/O操作、文件内容比较、多线程、用户界面设计、任务管理、文件过滤、结果展示以及效率优化等。理解并熟练掌握这些知识点对于进行复杂的Java应用开发具有...

    获取上传的文件行数的最快速的java代码

    传统的逐行读取文件的方法可能会消耗大量内存,因为整个文件内容会被加载到内存中。为了避免这种问题,我们可以采用流式处理(Streaming)来高效地计算文件的行数。 以下是一种使用Java进行大文件行数计数的优化...

    Java文件同步开源项目Sync

    【Java文件同步开源项目Sync】是一个基于Java语言开发的实用工具,主要目的是提供高效、可靠的文件和目录同步功能。这个开源项目为开发者提供了一个简单易用的命令行接口,允许用户方便地对本地或远程文件系统进行...

    java 多个小文件合成一个文件

    3. **读取小文件内容**:通过FileInputStream的read()方法逐字节地读取每个小文件的内容。 4. **写入合并文件**:使用FileOutputStream的write()方法将读取到的字节写入合并文件。 5. **关闭流**:在所有操作完成...

    java 获取 配置文件 属性 单例模式 高效加载

    通过单例模式实例化获取propertyUtil 工具包实例,高效加载配置文件,java语言编写。通过单例模式实例化获取propertyUtil 工具包实例,高效加载配置文件,java语言编写。通过单例模式实例化获取propertyUtil 工具包...

    JAVA流比较两个TXT文件数据

    3. 比较文件内容:逐行读取两个文件的内容,直到文件末尾。如果某一行内容不匹配,则可以判断两个文件数据不一致。 ```java String line1, line2; while ((line1 = br1.readLine()) != null && (line2 = br2....

    java按行读取大文件并解析入库

    在Java编程中,处理大容量...同时,结合适当的解析策略和数据库插入操作,可以有效地将大文件内容解析并存储到数据库中。在实际应用中,应根据具体场景进行优化,如调整缓冲区大小、使用并发处理等,以达到最佳性能。

    java实现读取html网页文件

    - 使用`BufferedReader`的`readLine()`方法,逐行读取文件内容。这可以用来获取HTML文件的文本。 2. **处理HTML内容** - HTML内容通常包含标签和文本,如果只需要文本内容,可以使用`Jsoup`库解析HTML。`Jsoup`是...

Global site tag (gtag.js) - Google Analytics