Ho scritto il seguente metodo per vedere se un determinato file contiene solo caratteri di testo ASCII o anche caratteri di controllo. Potresti dare uno sguardo a questo codice, suggerire miglioramenti e segnalare sviste?Come verificare se il file è binario?
La logica è la seguente: "Se le prime 500 byte di un file contengono 5 o più caratteri di controllo - riferire come file binario"
grazie.
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;
}
È una tragedia che è contrassegnata come la risposta corretta, quando questo algoritmo classificherebbe un file che contiene "questo \ r \ nis \ r \ nonly \ r \ ntext" come binario. – Ingo
@Ingo true; sarebbe meglio controllare il rapporto tra i caratteri di controllo e i non controlli e anche verificare casi speciali come i caratteri di controllo comuni nel testo. Ero così giovane quando ho digitato questa risposta :) – Pointy