即,您如何区分归档文件(jar/rar/等)与文本文件(xml/txt,编码无关)文件?
原文由 yanchenko 发布,翻译遵循 CC BY-SA 4.0 许可协议
使用 Java 7 文件类 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;
}
}
原文由 rince 发布,翻译遵循 CC BY-SA 3.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
没有保证的方法,但这里有几种可能性:
在文件中查找标题。不幸的是,标头是特定于文件的,因此虽然您可能会发现它是一个 RAR 文件,但您不会得到关于它是文本文件还是二进制文件的更通用的答案。
计算字符与非字符类型的数量。文本文件将主要是字母字符,而二进制文件——尤其是压缩文件,如 rar、zip 等——将倾向于更均匀地表示字节。
寻找定期重复的换行符模式。