Olá pessoal,
No endereço abaixo foi postado método para verificar se um arquivo é binário.
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;
}
http://blowingjava.blogspot.com/
Abraço a todos,
gqueiroz
editado pela moderação: marketing gratuito tem limite. Adicionei o código ao post.
O seu programa dá “falsos positivos” para o caso de arquivos-texto com caracteres acentuados.
Também dá problemas no caso de o arquivo-texto ter sido salvo em Unicode ou UTF-8 (o Notepad do Windows XP e 2003 tem dessas coisas).
Uma regra que antigamente se usava era a seguinte:
- Ler os primeiros 1024 bytes
- Se houver um zero binário entre eles, o arquivo é binário.
Essa regra não vale mais por causa dos tais arquivos texto em Unicode.
Nesse caso a regra é um pouco diferente:
- Se o início do arquivo for FE FF, pode ser que seja um arquivo-texto em Unicode (little-endian).
- Se o início do arquivo for FF FE, pode ser que seja um arquivo-texto em Unicode (big-endian).
- Se o início do arquivo for EF BB BF, pode ser que seja um arquivo-texto em UTF-8.
Obrigado, thingol,
esse foi o meu objetivo ao postar o codigo. Estava precisando que alguem o validasse.
Sendo assim, agradeço pelos esclarecimentos.
gqueiroz