在 Java 中确定二进制/文本文件类型?
也就是说,您如何区分存档(jar/rar/等)文件与文本(xml/txt,编码无关)文件?
也就是说,您如何区分存档(jar/rar/等)文件与文本(xml/txt,编码无关)文件?
没有保证的方法,但这里有几种可能性:
查找文件上的标头。不幸的是,标头是特定于文件的,因此虽然您可能能够发现它是一个RAR文件,但您不会得到更通用的答案,即它是文本还是二进制文件。
计算字符数与非字符类型数。文本文件将主要是字母字符,而二进制文件 - 特别是压缩的文件,如rar,zip等 - 将倾向于更均匀地表示字节。
查找定期重复的换行符模式。
使用 Java 7 Files 类 http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#probeContentType(java.nio.file.Path)
boolean isBinaryFile(File f) throws IOException {
String type = Files.probeContentType(f.toPath());
if (type == null) {
//type couldn't be determined, assume binary
return true;
} else if (type.startsWith("text")) {
return false;
} else {
//type isn't text
return true;
}
}