import java.io.File
import java.io.FileInputStream
import java.math.BigInteger
import java.security.MessageDigest
import java.util.HashMap
import java.util.Map
public class FileDigest {
/**
* 获取单个文件的MD5值!
* @param file
* @return
*/
public static String getFileMD5(File file) {
if (!file.isFile()){
return null
}
MessageDigest digest = null
FileInputStream in=null
byte buffer[] = new byte[1024]
int len
try {
digest = MessageDigest.getInstance("MD5")
in = new FileInputStream(file)
while ((len = in.read(buffer, 0, 1024)) != -1) {
digest.update(buffer, 0, len)
}
in.close()
} catch (Exception e) {
e.printStackTrace()
return null
}
BigInteger bigInt = new BigInteger(1, digest.digest())
return bigInt.toString(16)
}
/**
* 获取文件夹中文件的MD5值
* @param file
* @param listChild true递归子目录中的文件
* @return
*/
public static Map<String, String>getDirMD5(File file,boolean listChild) {
if(!file.isDirectory()){
return null
}
//<filepath,md5>
Map<String, String>map=new HashMap<String, String>()
String md5
File files[]=file.listFiles()
for(int i=0i<files.lengthi++){
File f=files[i]
if(f.isDirectory()&&listChild){
map.putAll(getDirMD5(f, listChild))
} else {
md5=getFileMD5(f)
if(md5!=null){
map.put(f.getPath(), md5)
}
}
}
return map
}
public static void main(String[] args) {
File file1 = new File("a.txt")
File file2 = new File("b.txt")
System.out.println(getFileMD5(file1).equals(getFileMD5(file2)))
}
}
1)程序运行开始的时候,提示输出两个文件的路径;2)程序一行一行比较,当其中有一行不一样的时候,提示文件内容不同的行数以及内容;
3)如果文件内容一样,提示用户内容一样。
package buffered
import java.io.*
import java.lang.String
import java.util.Scanner
public class BufferedTest
{
public static void main(String[] args){
try{Scanner readr=new Scanner(System.in)<br/>System.out.println("输入第一个文件的路径及文件名:")<br/>String file1=readr.next()<br/>System.out.println("输入第二个文件的路径及文件名:")<br/>String file2=readr.next()<br/>FileReader inOne1=new FileReader(file1)<br/>BufferedReader inTwo1=new BufferedReader(inOne1)<br/>String s1=null<br/>int i=0//行数 <br/>boolean b=true//检察是行数 <br/>FileReader inOne2=new FileReader(file2)<br/>BufferedReader inTwo2=new BufferedReader(inOne2)<br/>String s2=null<br/>//文件内容对比 <br/>while((s1=inTwo1.readLine())!=null){ <br/>i++<br/>while((s2=inTwo2.readLine())!=null){ <br/><br/>if(s1.equals(s2)!=true){ <br/>System.out.println("第"+i+"行:"+s1+"和"+s2+"内容不一样")<br/>b=false<br/>}
break
}
}
if(b){System.out.println("文件内容一样")}
}
catch(IOException e){
System.out.println(e)
}
}
}
计算MD5或SHA-1,一样的就是同一个文件
下面的代码,不需要额外使用第三方组件,且支持超大文件
// 计算文件的 MD5 值publicstatic String getFileMD5(File file) {
if (!file.isFile()) {
return null
}
MessageDigest digest = null
FileInputStream in = null
byte buffer[] = newbyte[8192]
int len
try {
digest =MessageDigest.getInstance("MD5")
in = new FileInputStream(file)
while ((len = in.read(buffer)) != -1) {
digest.update(buffer, 0, len)
}
BigInteger bigInt = new BigInteger(1, digest.digest())
return bigInt.toString(16)
} catch (Exception e) {
e.printStackTrace()
return null
} finally {
try {
in.close()
} catch (Exception e) {
e.printStackTrace()
}
}
} // 计算文件的 SHA-1 值
publicstatic String getFileSha1(File file) {
if (!file.isFile()) {
return null
}
MessageDigest digest = null
FileInputStream in = null
byte buffer[] = newbyte[8192]
int len
try {
digest =MessageDigest.getInstance("SHA-1")
in = new FileInputStream(file)
while ((len = in.read(buffer)) != -1) {
digest.update(buffer, 0, len)
}
BigInteger bigInt = new BigInteger(1, digest.digest())
return bigInt.toString(16)
} catch (Exception e) {
e.printStackTrace()
return null
} finally {
try {
in.close()
} catch (Exception e) {
e.printStackTrace()
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)