Verificando se o arquivo é binário
Mais uma vez me deparei com um problema sem solução encontrada no google: Pecisava importar dados de um arquivo texto (padrão CSV), mas antes de efetuar essa leitura teria que verificar se era um arquivo binário, ou seja, algum infeliz poderia ter renomeado uma figura com extensão JPG para CSV ou TXT. Pois bem, nao encontrei a solução e parti para o plano B.
Costumo chamar de plano B a segunda alternativa, e mais chata, que é quando temos que encontrar a solução por si só. Então, voltei aos tempos de faculdade, revendo conceitos de bits, bytes, hexadecimais, códigos ASCII e etc. Foi quando percebi que a solução não era tão complicada quanto parecia. Já que eu queria ler um arquivo formado TOTALMENTE por caracteres ASCII, então deveria verificar símbolo a símbolo se seu código ASCII estava entre 0 e 127.
Testei com vários tipos de documentos (doc, jpg, wmv, pps, jar, mp3, pdf) e todos foram reconhecidos como binários. Caso você queira testar com mais algum tipo de arquivo, nos comunique os resultados. O código está abaixo:
public boolean isBinaryFile(String file){
boolean isBinary = false;
BufferedReader in = null;
try {
/*Reads the file*/
in = new BufferedReader(new FileReader(file));
String str;
/*Walking through the file until a binary character is founded*/
while((str = in.readLine()) != null && !isBinary){
for (int i = 0; i < str.length(); i++){
isBinary = (int) str.charAt(i) > 127;
}
}
in.close();
} catch (FileNotFoundException e) {
} catch (IOException e) {
}
return isBinary;
}