Я написал следующий метод, чтобы узнать, содержит ли конкретный файл только текстовые символы 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;
}
Это трагедия, которая отмечена как правильный ответ, когда этот алгоритм классифицирует файл, содержащий этот «r \ n \ r \ nonly \ r \ ntext» как двоичный. – Ingo
@Ingo true; было бы лучше проверить какое-то отношение управляющих символов к неконтролируемым, а также проверить специальные случаи, такие как обычные символы управления в тексте. Я был так молод, когда набрал этот ответ :) – Pointy