如何检查文件是否为二进制文件?

Jam*_*sev 6 java binary ascii file

我编写了以下方法来查看特定文件是否仅包含ASCII文本字符或控制字符除此之外.你能看一下这段代码,建议改进并指出疏忽吗?

逻辑如下:"如果文件的前500个字节包含5个或更多控制字符 - 将其报告为二进制文件"

谢谢.

public boolean isAsciiText(String fileName) throws IOException {

    InputStream in = new FileInputStream(fileName);
    byte[] bytes = new byte[500];

    in.read(bytes, 0, bytes.length);
    int x = 0;
    short bin = 0;

    for (byte thisByte : bytes) {
        char it = (char) thisByte;
        if (!Character.isWhitespace(it) && Character.isISOControl(it)) {

            bin++;
        }
        if (bin >= 5) {
            return false;
        }
        x++;
    }
    in.close();
    return true;
}
Run Code Online (Sandbox Code Playgroud)

Poi*_*nty 3

由于您将此类称为“isASCIIText”,因此您确切地知道您要查找的内容。换句话说,它不是“isTextInCurrentLocaleEncoding”。因此,您可以更准确地:

if (thisByte < 32 || thisByte > 127) bin++;
Run Code Online (Sandbox Code Playgroud)

编辑,很久以后- 在评论中指出,这个简单的检查会被以大量换行符开头的文本文件绊倒。最好使用“ok”字节表,并包含可打印字符(包括回车符、换行符和制表符,可能还包括换页符,尽管我认为许多现代文档不会使用这些字符),然后检查桌子。

  • @英戈真实;最好检查控制字符与非控制字符的比例,并检查特殊情况,例如文本中常见的控制字符。当我输入这个答案时我还很年轻:) (2认同)