J'ai écrit la méthode suivante pour voir si un fichier particulier contient des caractères de texte ASCII seulement ou des caractères de contrôle en plus de cela. Pourriez-vous jeter un coup d'oeil sur ce code, suggérer des améliorations et souligner les oublis?Comment vérifier si le fichier est binaire?
La logique est la suivante: « Si les 500 premiers octets d'un fichier contiennent 5 ou plusieurs caractères de contrôle - le signaler sous forme de fichier binaire »
merci.
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;
}
Il est une tragédie que cela est marqué comme la bonne réponse, lorsque cet algorithme classerait un fichier qui contient « ce \ r \ nis \ r \ nUne \ r \ ntext » sous forme binaire. – Ingo
@Ingo vrai; il vaudrait mieux vérifier le rapport entre les caractères de contrôle et les non-contrôles, et aussi vérifier les cas spéciaux comme les caractères de contrôle communs dans le texte. J'étais si jeune quand j'ai tapé cette réponse :) – Pointy