• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

amiloM1425

Ficheiros Binários - Ignorar line feed

8 mensagens neste tópico

Olá a todos,

cá estou eu novamente com mais uma dúvida. Desta vez relacionada com ficheiros binários.

No projecto em que estou a trabalhar tenho de fazer a leitura de uns ficheiros binários, o que acontece é que  o conteúdo dos ficheiros é composto exclusivamente por informação em hexadecimal.

Para aceder à informação do ficheiro faço o seguinte:

...
in = new BufferedReader(new FileReader(file));
line = in.readLine();
in.close();
fileContent = new String[line.length()];
byte charByte[] = line.getBytes();
String aux = null;
for (int i = 0; i < 8; i++) {
   aux = Integer.toHexString(charByte[i]&0xFF).toUpperCase();
   if(aux.length()==1)
   aux = "0"+aux;
   fileContent[i] = aux;
}
...

Tudo funciona perfeitamente até ao momento em que o ficheiro contém 0x0A ou 0x0D ou seja os valores correspondentes ao line feed e ao carriage return, o que faz com que só me seja devolvida a informação até ao ponto em que foi lido o 0x0A ou o 0x0D.

O que gostaria de saber é se existe alguma forma de ler todo conteúdo do ficheiro ignorando o line feed e o carriage return.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Primeiro, se estás a ler ficheiros binários estás a usar as streams erradas, FileReader e FileWriter são streams de caracteres e não binárias.

Segundo, a questão de leitura das mudanças de linha está relacionada com o uso errado de streams de texto, se estás a ler usando linhas, através o readLine(), uma linha termina no caractere terminador de linha, e não há nada a fazer, faz parte de todo o conceito de ler linha a linha :)

Se os ficheiros são realmente binários e pretendes fazer leitura binária, então terás de usar streams binárias, por exemplo FileInputStream/FileOutputStream para bytes e BufferedInputStream/BufferedOutputStream para usares buffers.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hum, ok obrigado. Vou então tentar pegar por aí a ver o que consigo fazer.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem, acho que já cheguei a uma solução.

...
FileInputStream in;
int d;

ArrayList<Integer> arr = new ArrayList<Integer>();
try {
  in = new FileInputStream(file);
  while ((d = in.read()) != -1) {
     arr.add(d&0xFF); 
  }
  for (Integer integer : arr) {
     System.out.println(integer);
   }
...

Assim já tenho os valores decimais correspondentes aos valores hexadecimais.

Agora levanto outra questão que é a seguinte.

Quando se chega ao EOF é devolvido -1, até aí tudo bem. Agora, o que define o EOF? É um "caractere"? É que se assim for irei ter o mesmo problema quando no ficheiro vier o valor hexadecimal correspondente ao EOF, certo?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

EOF não está no ficheiro, é um valor dependente do sistema operativo, embora nunca me lembre de ver outro valor que não -1, que represente a situação de não existirem mais dados num ficheiro que está a ser lido. É uma condição e não um caractere presente no ficheiro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora