工作中遇到一个需要比较两个文件是否一致的问题,第一反应就是通过 MD5
比较,所以直接干代码。
为什么会写 Go
呢,纯属是最近在使用 Go
语言,然后顺便也整理一下。(就是为了让文章字数显得多 )
Java 实现
新建一个 Maven 的 Java 项目,并引入以下依赖:
<!-- https://mvnrepository.com/artifact/commons-codec/commons-codec -->
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.15</version>
</dependency>
直接使用现成的方法,看两者的文件的输出结果是否一致即可;如果想省事也可以使用 equals
判断是否相等。
public class FileMd5 {
public static void main(String[] args) throws Exception {
System.out.println(DigestUtils.md5Hex(new FileInputStream("/Users/roc/a.p12")));
System.out.println(DigestUtils.md5Hex(new FileInputStream("/Users/roc/b.p12")));
}
}
【注】org.apache.commons
的工具包直接 666 带走。
Go 实现
就喜欢 go 内置了好多现成的工具,组合一下就可以直接用。
func main() {
println(fileToMd5("/Users/roc/a.p12"))
println(fileToMd5("/Users/roc/b.p12"))
}
func fileToMd5(filePath string) string {
file, err := os.Open(filePath)
if err != nil {
log.Fatal(err)
}
defer file.Close()
hash := md5.New()
if _, err := io.Copy(hash, file); err != nil {
log.Fatal(err)
}
return hex.EncodeToString(hash.Sum(nil))
}