Dado o arquivo contas.csv abaixo:
CC,12345,224488,Fulano da Silva,2000,00
CC,45678,336699,Beltrano da Costa,3000,58
CP,12345,113355,Cicrano Lima,60000,77
e o código do main:
public static void main(String[] args) {
try {
Scanner scanner = new Scanner(new File("contas.csv"));
String linha = "";
Locale localeBr = new Locale("pt", "BR");
while(scanner.hasNextLine()) {
linha = scanner.nextLine();
Scanner linhaScanner = new Scanner(linha);
linhaScanner.useLocale(localeBr);
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(localeBr, "%2s | %05d | %08d | %s | %,.2f %n", tipoConta, agencia, numero, titular, saldo);
linhaScanner.close();
}
scanner.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Ao utilizar o Locale pt_BR para o Scanner juntamente com o delimitador "," o código de leitura do contas.csv deixa de ler todos os elementos do arquivo.
Isto acontece porque a parte decimal do saldo no csv também é representado por vírgula e, por isso, o código proposto na aula entende como se fosse um novo elemento.
Segue saída:
CC | 12345 | 00224488 | Fulano da Silva | 2.000,00
CC | 45678 | 00336699 | Beltrano da Costa | 3.000,00 // sem a parte decimal
CP | 12345 | 00113355 | Cicrano Lima | 60.000,00 // sem a parte decimal
A melhor opção neste caso seria alterar o delimitador do arquivo contas.csv para algo como ";" ?
E outra, como funciona o linhaScanner.next() quando existe um caractere (no texto que será lido do contas.csv) igual ao delimitador definido? Existe alguma outra solução utilizada? Porque ao que tudo indica, ocorrerá o mesmo problema.