Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Passando encode no construtor do Scanner

Galera.. o seguinte código:

Scanner scan = new Scanner(new File("contas.csv"), "UTF-8");

Faz com que não apareça nada no console quando eu executo o código (código completo abaixo)

public static void main(String[] args) throws Exception {

        Scanner scan = new Scanner(new File("contas.csv"));

        while(scan.hasNextLine())
        {
            String linha = scan.nextLine();
            //System.out.println(linha);

            Scanner linhaScanner = new Scanner(linha);
            linhaScanner.useLocale(Locale.US); //definir o padrão americano $
            linhaScanner.useDelimiter(",");

            String tipoConta = linhaScanner.next();
            int agencia = linhaScanner.nextInt();
            int numero = linhaScanner.nextInt();
            String titular = linhaScanner.next();
            double saldo = linhaScanner.nextDouble();

            System.out.format(new Locale("pt", "BR"), "%s - %03d/%d , %s (%01.2f) %n", tipoConta, agencia, numero, titular, saldo);

            linhaScanner.close();

            //String[] valores = linha.split(",");
            //System.out.println(Arrays.toString(valores));
        }

        scan.close();
    }
    Porém se eu executo o código com o construtor vazio, ele funciona normalmente... 

Observações:

  • isso ocorre mesmo alterando o encode em propertyes do arquivo conta.csv para "UTF-8" também;
  • Não importa se uso UTF-8 , UTF-16, ASCII, etc.. só funciona se eu colocar o "windows-1252" no construtor ou deixar vazio no construtor.. -Se eu colocar no construtor "windows-1252" e no arquivo eu trocar por exemplo, pra ASCII, funciona normalmente tbm... então parece que não importa alterar o tipo no arquivo...

Alguma ideia?

5 respostas

Ninguém?

Oi Arthur, tudo bem?

Todo encode precisa ser pareado. Não adianta pedir pra fazer a leitura em utf8 se o arquivo está em ascii.

Se você não passa nenhum como parâmetro no construtor, o java vai tentar detectar qual é o encode, mas se você informa um e o arquivo tem outro, as tabelas de caracteres serão diferente e por isso, pode haver erros de leitura.

Espero ter ajudado. Qualquer dúvida é só avisar!

Bons estudos!!

Isso eu entendi, mas não entendi bem o comportamento desse meu código :/

solução!

Oi Arthur. Basicamente, "windows-1252" foi o encode padrão usado pelo seu editor de texto para salvar o arquivo na sua máquina. Portanto, ele só será exibido da maneira correta no seu Eclipse, caso você passe o "windows-1252" no construtor ou deixe vazio para que o Eclipse faça a detecção automática do encode padrão usado no seu Sistema Operacional/editor de texto. Se o encode padrão adotado para salvar seus arquivos fosse o UTF-8, a mesma regra valeria, e ele também não exibiria nada caso fosse passado qualquer coisa diferente de "UTF-8" dentro do construtor.

Espero ter ajudado. Qualquer dúvida é só avisar! :)

Ah sim.. obrigado pela ajuda! Negócio é praticar