Bom dia pessoal!
Eu não estou conseguindo ler um arquivo caracter a caracter, usando o readChar() do DataInputStream.
Ele lê um caracter estranho no lugar do que está no arquivo.
Segue o código.
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class Teste2
{
public static void main(String[] args)
{
File file = new File("C:\\teste.txt");
char c;
try {
FileInputStream fileinput = new FileInputStream(file);
DataInputStream datainput = new DataInputStream(fileinput);
c = datainput.readChar();
System.out.println(""+c);
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
}
DataInputStream.readChar lê 2 bytes de cada vez. Ou seja, só se seu arquivo texto estiver codificado como Unicode e ainda com o byte mais significativo primeiro (diferentemente da codificação do Notepad, que salva com o byte menos significativo primeiro) é que você vai conseguir ler corretamente seu texto.
O correto é usar FileReader para ler seu arquivo. Usualmente você faria:
try {
BufferedReader br = new BufferedReader (new FileReader (file));
String line;
while ((line = br.readLine()) != null) {
// Processando uma linha de cada vez
}
}
Ler 1 caracter de cada vez é MUITO lento.
Esqueci de fechar o tal arquivo. Não se esqueça de usar “close” senão seu programa vai ficar maluco (por exemplo, você tenta abrir o arquivo de novo e não consegue, ou então você tenta abrir o arquivo por um outro programa e ele reclama que o arquivo está travado.)
Vou criar então um arquivo unicode, pois para o que preciso tem que ler caracter a caracter.
No java só tem essa opção?
Você pode ler caracter a caracter com read.
Estranho (o nome deveria ser “readChar”, não?) e ainda mais estranho (porque ele retorna um int, não um char) mas é verdade.
try {
BufferedReader br = new BufferedReader (new FileReader (file));
int rc;
while ((rc = br.read()) != -1) {
char ch = (char) rc; // este é o caracter lido
// Processando um caracter de cada vez.
}
}