Napisałem następującą metodę, aby sprawdzić, czy określony plik zawiera tylko znaki tekstowe ASCII lub dodatkowo kontrolować znaki. Czy możesz rzucić okiem na ten kod, zasugerować ulepszenia i wskazać niedopatrzenia?Jak sprawdzić, czy plik jest binarny?
Logika jest następująca: „Jeśli pierwsze 500 bajtów pliku zawiera 5 lub więcej znaków sterujących - raport jako plik binarny”
dziękuję.
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;
}
To tragedia, że ta jest oznaczona jako poprawną odpowiedź, gdy ten algorytm będzie sklasyfikować plik zawierający „to \ r \ nis \ r \ nTylko \ r \ ntext” jako binarny. – Ingo
@Ingo true; lepiej sprawdzić proporcje znaków kontrolnych do nie-kontroli, a także sprawdzić przypadki specjalne, takie jak znaki kontrolne wspólne dla tekstu. Byłem taki młody, kiedy wpisałem tę odpowiedź :) – Pointy