使用Guava 14+和Java 7计算md5

时间:2014-01-31 12:33:47

标签: java-7 guava

我有一个Java 7的Path。我想计算该路径所代表的文件内容的md5。

我通常使用Guava的散列机制(ByteSource#hash(HashFunction))。

如何从Java 7的Path转到番石榴的ByteSource以便我可以计算其md5?我是否必须通过中间人java.io.File

是的,我知道ByteSourcePath用于同一目的。但我的应用程序的某些部分使用ByteSource,而其他部分使用Path

P.S。我知道我可以使用java.security.DigestInputStream。这个问题是关于如何将Guava的ByteSource与Java 7 Path集成的问题的一个例子。

2 个答案:

答案 0 :(得分:3)

您可以轻松自己为ByteSource撰写Path。最小的例子:

public class PathByteSource extends ByteSource {
    private final Path path;

    public PathByteSource(Path path) {
        this.path = path;
    }

    @Override
    public InputStream openStream() throws IOException {
        return java.nio.file.Files.newInputStream(path);
    }
}

谨慎使用其他方法,例如size()read(),以提高效率。

答案 1 :(得分:2)

我猜你真的不得不去File。 Guava适用于Java 6(甚至可以返回到5),因此它们不能引用Java 7中引入的类。使用path.toFile()时是否存在任何问题?