1
resposta

Repassando arquivo CSV para TXT

import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.util.Locale; import java.util.Scanner;

public class TesteLeituraScan {

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

   Scanner scanner = new Scanner(new File("C:\\Users\\daara\\OneDrive\\Área de Trabalho\\contas.csv"));

   while(scanner.hasNextLine()) {

           String linha = scanner.nextLine();
           Scanner linhaScan = new Scanner(linha);

           linhaScan.useDelimiter(",");
           linhaScan.useLocale(Locale.US);

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

           PrintWriter file = new PrintWriter("saidateste.txt");
           file.printf(new Locale("pt", "BR"), "%s - %04d-%04d, %s: R$%05.2f %n", 
                    tipoConta, agencia, numero, titular, saldo);
           file.close();

           System.out.format(new Locale("pt", "BR"), "%s - %04d-%04d, %s: R$%05.2f %n", 
             tipoConta, agencia, numero, titular, saldo);

           linhaScan.close();
       }    


   scanner.close();

 }

}

/* Estou usando aqui passando com o PrintWriter uma String formatada para o arquivo saidateste.txt (todos arquivos estao no root do projeto), contudo, apenas a última conta é registrada, sendo a conta da {CC - 0022-0044, Ana Garcias: R$350,40}, e as outras contas não ficam registradas no meu arquivo txt com todas as contas, somente a última Alguém poderia me ajudar a resolver esse problema? */

1 resposta

Olá Erick, tudo bem?

Pelo que entendi, você está tentando passar um arquivo CSV para TXT utilizando o PrintWriter, mas apenas a última conta é registrada no arquivo de saída. Isso ocorre porque você está criando um novo PrintWriter dentro do loop while, o que faz com que o arquivo seja sobrescrito a cada iteração.

Para resolver esse problema, você pode criar o PrintWriter antes do loop while e passá-lo como parâmetro para o System.out.format e para o file.printf. Dessa forma, todas as contas serão registradas no arquivo de saída.

Segue um exemplo de como ficaria o código:

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Locale;
import java.util.Scanner;

public class TesteLeituraScan {

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

        Scanner scanner = new Scanner(new File("C:\\Users\\daara\\OneDrive\\Área de Trabalho\\contas.csv"));
        PrintWriter file = new PrintWriter("saidateste.txt");

        while(scanner.hasNextLine()) {

            String linha = scanner.nextLine();
            Scanner linhaScan = new Scanner(linha);

            linhaScan.useDelimiter(",");
            linhaScan.useLocale(Locale.US);

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

            file.printf(new Locale("pt", "BR"), "%s - %04d-%04d, %s: R$%05.2f %n", 
                    tipoConta, agencia, numero, titular, saldo);

            System.out.format(new Locale("pt", "BR"), "%s - %04d-%04d, %s: R$%05.2f %n", 
                    tipoConta, agencia, numero, titular, saldo);

            linhaScan.close();
        }

        file.close();
        scanner.close();

    }

}

Espero ter ajudado e bons estudos!