`

没事写的一个判断文件相同的java程序段

阅读更多

package checkSameFile;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.security.MessageDigest;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class CheckSameFile {

	public static char[] hexChar = { '0', '1', '2', '3', '4', '5', '6', '7',
			'8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };

	
	
	
	
	
	public static void main(String[] args) {
		Map<String,List<File>> filemap=new HashMap<String,List<File>>(); 
		printInfo("d:/ab", filemap);//修改路径判断对应路径下面的相同文件
		
	}
	
	
	/**
	 * 获得文件md5值
	 * @param fileName
	 * @param hashType
	 * @return
	 * @throws Exception
	 */
	public static String getHash(String fileName, String hashType)
			throws Exception {
		InputStream fis;
		fis = new FileInputStream(fileName);
		byte[] buffer = new byte[1024];
		MessageDigest md5 = MessageDigest.getInstance(hashType);
		int numRead = 0;
		while ((numRead = fis.read(buffer)) > 0) {
			md5.update(buffer, 0, numRead);
		}
		fis.close();
		return toHexString(md5.digest());
	}
    /**
     * md5转成字符串
     * @param b
     * @return
     */
	public static String toHexString(byte[] b) {
		StringBuilder sb = new StringBuilder(b.length * 2);
		for (int i = 0; i < b.length; i++) {
			sb.append(hexChar[(b[i] & 0xf0) >>> 4]);
			sb.append(hexChar[b[i] & 0x0f]);
		}
		return sb.toString();
	}
	
	
	/**
	 * 无用
	 * @param path
	 */
	public static void getf(String path){
		File f= new File(path);
		if(f.isFile()){
			System.out.println(f.getName());
		}else{
			File[] fs=f.listFiles();
			for(File f0:fs){
				getf(f0.getPath());
			}
		}
	}
	/**
	 * 将所有的文件装入map
	 * @param path
	 * @return
	 */
	public static  void   getSameFile(String path,Map<String,List<File>> filemap){
		File f= new File(path);
		if(f.isFile()){
			String key;
			try {
				key = getHash(f.getPath(),"MD5");
				if(filemap.containsKey(key)){
					List<File> fd=filemap.get(key);
					fd.add(f);
				}else{
				List<File> fs=new ArrayList<File>();
				fs.add(f);
				System.out.println(f.getName());
				filemap.put(key, fs);
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
			
		}else{
			File[]  fs=f.listFiles();
			for(File f0:fs){
				getSameFile(f0.getPath(), filemap);
			}
		}
	} 
	/**
	 * 打印判断结果
	 * @param path
	 * @param filemap
	 */
	public static void printInfo(String path,Map<String,List<File>> filemap){
		
		getSameFile(path,filemap);
//		System.out.println(filemap);
		Collection<List<File>> sets=filemap.values();
		int i=1;
		
		for(List<File> f:sets){
//			System.out.println(f.size());
			if(f.size()>1){
				System.out.println("-------------------");
				System.out.println("第"+i+"组:以下"+f.size()+"文件内容相同:");
				int j=1;
			  for(File f_0:f){
				  System.out.println(j+"   文件名字:"+f_0.getName()+"---文件路径:"+f_0.getPath()+"\n");
				  j++;
			  }
			  System.out.println("-------------------");
			  i++;
			}
			
		}
	}
	
	
	
}


3
1
分享到:
评论

相关推荐

    java通过文件头内容判断文件类型

    在Java编程中,判断文件类型通常不是通过文件扩展名,而是通过读取文件的头部字节来识别。这是因为有些文件可能没有明确的扩展名,或者扩展名被恶意篡改。文件头内容通常包含特定的标识符,这些标识符是文件格式的...

    java程序判断文件编码的类型

    ### Java程序判断文件编码的类型 #### 知识点概览 本文档旨在教导读者如何通过Java编程语言来判断文件的编码类型。这包括常见的编码格式如GBK、UTF-8等。了解文件编码对于处理多语言环境下的文本数据至关重要。 ##...

    Java判断文件的编码

    本文将详细介绍如何使用Java来判断文件是否为UTF-8或GBK编码,并提供一个示例代码。 #### 文件编码基础知识 1. **UTF-8**:一种可变长度的字符编码,适用于所有Unicode字符,它通过使用一种巧妙的方案来表示各种...

    Java编程输入两个年月日,(1)判断两个日期是否相同,并且将相差的天数显示出来;(2)将日期后推或前推N天,并将该日期输出。

    综上所述,这个Java程序主要实现了两个功能:一是判断两个给定日期是否相同及计算它们之间的天数差;二是将给定日期向前或向后调整一定数量的天数。程序的核心是`DateType`类的设计与实现,它包含了日期的创建、打印...

    java源码包---java 源码 大量 实例

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    JAVA闰年的判断

    这段代码首先导入了`java.util.Scanner`类,然后创建了一个`Scanner`对象`input`来读取用户的输入。接着,我们通过`nextInt()`方法获取用户输入的年份,并将其存储在变量`year`中。接下来,我们使用逻辑运算符计算`...

    Java编写的判断年份的程序

    在Java编程语言中,判断一个年份是否为...通过上述知识点,我们可以理解并实现一个简单的Java程序,用于判断输入的年份是否为闰年。在实际编程中,还可以根据需求增加更多的功能,比如处理多个年份、优化用户交互等。

    java如何实现判断文件的真实类型

    Java如何实现判断文件的真实类型 Java判断文件真实类型是非常重要的,因为在文件传输过程中,为了安全验证,对于手工改动文件后缀名产生的伪造文件进行判断过滤。Java判断文件真实类型依靠的是文件的头部编码信息。...

    一个Java程序实例

    例如,一个名为`main`的方法,其声明为`public static void main(String[] args)`,是Java程序的入口点。程序的执行始于`main`方法,因此它是任何Java应用程序的起点。 此外,学习如何处理异常也是Java编程中的重要...

    java读取shp文件代码

    - 判断文件是否以.shp或.zip结尾。 - `URL zipURL = new URL(base.getProtocol(), base.getHost(), base.getPort(), noExt + ext);` - 创建URL对象以获取ZIP文件。 - `URLConnection uc = zipURL.openConnection...

    java程序的编译及运行实验说明

    2. 一个程序中是否能存在两个访问权限为 public 的类?通过程序验证你的判断。 六、线程实验 实验目的:掌握 Java 多线程程序的特点,编译,调试及运行方法。 实验环境:Java 编译系统。 预备知识:线程及进程的...

    JAVA流比较两个TXT文件数据

    注意,这段代码假设两个文件的大小相同且行数相同。如果文件大小不同或行数不同,需要更复杂的逻辑来处理。 通过以上步骤,我们就可以实现Java中基于流的TXT文件数据比较。这种方法不仅效率较高,而且代码结构清晰...

    JAVA判断题题库20151209

    - **解析:** Java程序通常由一个或多个类组成,其中必须有一个包含`main`方法的类作为程序的入口点,这个类被称为主类。尽管可以定义多个类,但只有主类包含`public static void main(String[] args)`方法,这是程序...

    java程序语言课程设计

    * 添加音乐功能:使用 Java 的音频处理类库来添加音乐功能,使程序在翻开相同的图标时播放一段音乐,不同时播放另一段音乐 数据库通用查询系统 数据库通用查询系统旨在实现一个通用的数据库查询系统,能够满足不同...

    java源码包2

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...

    java文件复制器代码

    Java 文件复制器是一种实用程序,用于在计算机上复制文件。在这个特定的代码示例中,我们看到一个名为 `FileCopy` 的类,该类包含了复制文件的核心逻辑。下面我们将详细探讨这个程序的关键部分以及实现文件复制所...

    java源码包3

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...

    用java写的进行文件处理的代码

    例如,本案例中提到的任务:有两个文本文件,一个是包含字符串列表的文件(`data1.txt`),另一个是包含需要替换的信息(`data2.txt`)。具体来说,任务要求按照`data2.txt`文件中的规则,对`data1.txt`文件中的特定...

    自考Java语言程序设计(一)串讲

    - **第一个Java程序示例**: ```java public class HelloWorld { public static void main(String[] args) { System.out.println("你好!JAVA课程"); } } ``` 这段代码展示了Java程序的基本结构,包括公共类...

Global site tag (gtag.js) - Google Analytics