我寫了下面的方法來查看特定文件是否僅包含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