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)
由于您将此类称为“isASCIIText”,因此您确切地知道您要查找的内容。换句话说,它不是“isTextInCurrentLocaleEncoding”。因此,您可以更准确地:
if (thisByte < 32 || thisByte > 127) bin++;
Run Code Online (Sandbox Code Playgroud)
编辑,很久以后- 在评论中指出,这个简单的检查会被以大量换行符开头的文本文件绊倒。最好使用“ok”字节表,并包含可打印字符(包括回车符、换行符和制表符,可能还包括换页符,尽管我认为许多现代文档不会使用这些字符),然后检查桌子。