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

Classe scanner sem construtor com charset

Quando tento instanciar um Scanner da mesma forma como mostrada no exercicio, aparece a seguinte exceçao:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    The constructor Scanner(File, Charset) is undefined

Os imports estão todos corretos, e qualquer outro construtor funciona normalmente mas mesmo apertando control+space não aparece o construtor File, Charset.

4 respostas

Oi Nicolas,

Poste aqui como está o seu código, para vermos se não tem algo de errado.

package br.com.nick.javaIO.teste;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Locale;
import java.util.Scanner;
public class TesteScanner {
    public static void main(String[] args) throws IOException {
        Scanner scanner = new Scanner(new File("contas.csv"), StandardCharsets.UTF_8);

        while (scanner.hasNextLine()) {
            String linha = scanner.nextLine();
            //'linha' passa a ser a proxima linha do arquivo a ser lida

            Scanner linhaScanner = new Scanner(linha);
            //novo scanner eh criado para ler cada linha individaulmente
            linhaScanner.useLocale(Locale.US); //necessario para correta compilcao do saldo uma vez que este precisa saber como deve interpretar o valor do arquivo
            linhaScanner.useDelimiter(",");
            //delimiter recebe como parametro caracter que se deseja tirar ao analisar a linha, isto eh, estamos falando oq delimita nosso 'next' (aquilo que queremos analisar)

            String tipoConta = linhaScanner.next(); //next padrao para ler a proxima string a partir da linha da iteracao atual
            int agencia = linhaScanner.nextInt(); //next feito para numeros inteiros, importante pra facilitar posterior formatacao
            int numero = linhaScanner.nextInt();
            String titular = linhaScanner.next();
            double saldo = linhaScanner.nextDouble(); //next feito para numeros flutuantes, importante pra facilitar posterior formatacao

            System.out.format(new Locale("pt", "BR"), "%s; %04d; %02d; %1s: %05.2f%n", tipoConta, agencia, numero, titular, saldo);
            //new Locale usado para avisar como deve formatar a saida
            //metodo format recebe parametros de regiao e formatacao para dados lidos a partir de um scanner
            //a partir da % eh possivel formatar diversos tipos para a saida de dados
            linhaScanner.close();
        }

        scanner.close();
    }
}
solução!

Oi Nicolas,

Realmente está errado o código do exercício. Eu já fiz o ajuste, sendo o correto:

Scanner scanner = new Scanner(new File("contas.csv"), StandardCharsets.UTF_8.name());

Obrigado pelo feedback e bons estudos!

Muito obrigado!