在 Java 中确定二进制/文本文件类型?

2022-08-31 22:26:46

也就是说,您如何区分存档(jar/rar/等)文件与文本(xml/txt,编码无关)文件?


答案 1

没有保证的方法,但这里有几种可能性:

  1. 查找文件上的标头。不幸的是,标头是特定于文件的,因此虽然您可能能够发现它是一个RAR文件,但您不会得到更通用的答案,即它是文本还是二进制文件。

  2. 计算字符数与非字符类型数。文本文件将主要是字母字符,而二进制文件 - 特别是压缩的文件,如rar,zip等 - 将倾向于更均匀地表示字节。

  3. 查找定期重复的换行符模式。


答案 2

使用 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;
        }
    }