我有一个Java 7的Path
。我想计算该路径所代表的文件内容的md5。
我通常使用Guava的散列机制(ByteSource#hash(HashFunction)
)。
如何从Java 7的Path
转到番石榴的ByteSource
以便我可以计算其md5?我是否必须通过中间人java.io.File
?
是的,我知道ByteSource
和Path
用于同一目的。但我的应用程序的某些部分使用ByteSource
,而其他部分使用Path
。
P.S。我知道我可以使用java.security.DigestInputStream
。这个问题是关于如何将Guava的ByteSource
与Java 7 Path
集成的问题的一个例子。
答案 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()
时是否存在任何问题?