我写了下面的方法来查看特定文件是否仅包含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;
}
当这个算法将包含“this \ r \ nis \ r \ nonly \ r \ ntext”的文件分类为二进制文件时,这被标记为正确答案是悲剧。 – Ingo 2013-12-08 23:30:09
@Ingo true;最好检查一些控制字符与非控制字符的比例,并检查文本中常见的控制字符等特殊情况。当我输入这个答案时,我很年轻:) – Pointy 2013-12-08 23:41:53