Escribí el siguiente método para ver si un archivo particular contiene solo caracteres de texto ASCII o caracteres de control además de eso. ¿Podría echar un vistazo a este código, sugerir mejoras y señalar descuidos?¿Cómo comprobar si el archivo es binario?
La lógica es la siguiente: "Si los primeros 500 bytes de un archivo contienen 5 o más caracteres de control - Informe como archivo binario"
gracias.
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;
}
Es una tragedia que esta se marca como la respuesta correcta, cuando este algoritmo sería clasificar un archivo que contiene "esta \ r \ nis \ r \ Nonly \ r \ ntext" como binario. – Ingo
@Ingo verdadero; sería mejor verificar alguna proporción de caracteres de control a no controles, y también verificar casos especiales como los caracteres de control comunes en el texto. Era tan joven cuando escribí esta respuesta :) – Pointy