[RESOLVIDO]Ler tabela txt e escrever seus inserts em txt

13 respostas
jkrfabio

Consegui fazer com que o java lesse um arquivo simples .txt
o conteúdo do arquivo é este:

Natanael Pantoja|Fortaleza|27
Paulo Silveira|São Paulo|35

e meu código:

import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;

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

		Scanner scanner = new Scanner(new FileReader("arquivo.txt")).useDelimiter("\\||\\n");
		
		while(scanner.hasNext())
		{
			String nome = scanner.next();
			String cidade = scanner.next();
			String compras = scanner.next();
			System.out.println(nome);
			System.out.println(cidade);
			System.out.println(compras);
		}
		
	}
}

Não entendi muito bem o uso desse delimitador.
a saída no console está assim:

Natanael Pantoja
Fortaleza
27
Paulo Silveira
São Paulo
35

Conclusão, a ajuda que eu quero é bem simples e óbvia pra vocês.. Como colocar a saída do console para:

Natanael Pantoja|Fortaleza|27
Paulo Silveira|São Paulo|35

O que tenho de fazer ou mudar no meu código?

13 Respostas

C

while (scanner.hasNext()) { System.out.println(scanner.nextLine()); }

jkrfabio

Funcionou obrigado, mas esqueci de mencionar que eu preciso guardar esses valores numa variável, como no meu código:

String nome = scanner.next();
String cidade = scanner.next();
String compras = scanner.next();
C
String[] parametros = scanner.nextLine().split("\\|");
System.out.println(parametros[0]);
System.out.println(parametros[1]);
System.out.println(parametros[2]);
jkrfabio

A grosso modo eu queria fazer assim:

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
public class Main 
{
	public static void main(String[] args) throws IOException
	{

		Scanner scanner = new Scanner(new FileReader("arquivo.txt"));
		
		
		while(scanner.hasNext())
		{	
			String[] parametros = scanner.nextLine().split("\\|");  
			System.out.println(parametros[0]);  
			System.out.println(parametros[1]);  
			System.out.println(parametros[2]); 
            
    		scanner.close();
    	}
		
		File arquivo = new File("inserts.txt");  
		FileWriter fw = new FileWriter(arquivo);  
		BufferedWriter bw = new BufferedWriter(fw);  
		  
		bw.write("insert into tabela (nome, cidade, idade) values ("+parametros[0]+","+parametros[1]+","+parametros[2]);  
		bw.flush();  
		bw.close();
	}
}

Que ele lesse as duas linhas do meu arquivo txt
e que gerasse os inserts dessas duas linhas..

exemplo: ele leria natanael | fortaleza | 85
e escreveria no arquivo txt: insert into tabela (nome,cidade,idade) values ("natanael","fortaleza","85");

conseguiu entender mais ou menos a grosso modo?

C

Entendi, e qual a dúvida agora ?

jkrfabio

É que o código meu acima, está com erro.

  1. ele só está mostrando um dos nomes guardados no arquivo txt, sendo que são dois.
  2. ele não tá concatenando os parametros e seus índices.

o que fazer?

C

jkrfabio:
É que o código meu acima, está com erro.

  1. ele só está mostrando um dos nomes guardados no arquivo txt, sendo que são dois.
  2. ele não tá concatenando os parametros e seus índices.

o que fazer?

  1. Dentro do While, já monte o insert e guarde dentro de uma lista para gerar o txt posteriormente.
  2. Você está tentando usar o array parâmetros fora do while sendo que ele foi criado dentro.
jkrfabio
public static void main(String[] args) throws IOException
	{

		Scanner scanner = new Scanner(new FileReader("arquivo.txt"));
		
		while(scanner.hasNext())
		{	

			 	String[] parametros = scanner.nextLine().split("\\|");    
	            System.out.println(parametros[0]);    
	            System.out.println(parametros[1]);    
	            System.out.println(parametros[2]);
	            
	            File arquivo = new File("inserts.txt");
	            FileWriter fw = new FileWriter(arquivo);
	            BufferedWriter bw = new BufferedWriter(fw);
	            
	            bw.write("insert into tabela (nome, cidade, idade) values ("+parametros[0]+","+parametros[1]+","+parametros[2]+");");
	            bw.flush();
	            bw.close();

    	}

	}

Você está me ajudando bastante, estamos quase conseguindo.
esse meu código ele escreveu somente os dados da segunda linha do meu arquivo.txt
não gravou todos os dois nomes.
o que está faltando?

C

Vamos pensar… você está criando o arquivo.txt toda vez que entrar no while… logo, a cada linha ele vai se sobrescrever… você precisa criar o arquivo antes do while e fechar ele depois… de modo que para cada linha do while vc escreva uma linha no arquivo com o write

DavidUser

Tente entender oque você escreve, o código de um programa deve ser como uma redação

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
class Main
{
	public static void main(String[] args) throws IOException
	{

		Scanner scanner = new Scanner(new FileReader("arquivo.txt"));

		File arquivo = new File("inserts.txt");  
		FileWriter fw = new FileWriter(arquivo);  
		BufferedWriter bw = new BufferedWriter(fw);  
		
		//percorre o arquivo linha a linha
		while(scanner.hasNext()) 
		{	
			String[] parametros = scanner.nextLine().split("\\|"); //pega a linha e divide conforme o delimitador  
			System.out.println(parametros[0]);  
			System.out.println(parametros[1]);  
			System.out.println(parametros[2]);             

			//a escrita do insert é para cada linha lida do arquivo de entrada
			bw.write("insert into tabela (nome, cidade, idade) values ("+parametros[0]+","+parametros[1]+","+parametros[2]);  
			bw.flush();
    	}
		scanner.close(); //o fechamendo do scanner ocorre quando nao vou mais utilizalo
		bw.close();
		fw.close();
	}
}
C
DavidUser:
Tente entender oque você escreve, o código de um programa deve ser como uma redação
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
class Main
{
	public static void main(String[] args) throws IOException
	{

		Scanner scanner = new Scanner(new FileReader("arquivo.txt"));

		File arquivo = new File("inserts.txt");  
		FileWriter fw = new FileWriter(arquivo);  
		BufferedWriter bw = new BufferedWriter(fw);  
		
		//percorre o arquivo linha a linha
		while(scanner.hasNext()) 
		{	
			String[] parametros = scanner.nextLine().split("\\|"); //pega a linha e divide conforme o delimitador  
			System.out.println(parametros[0]);  
			System.out.println(parametros[1]);  
			System.out.println(parametros[2]);             

			//a escrita do insert é para cada linha lida do arquivo de entrada
			bw.write("insert into tabela (nome, cidade, idade) values ("+parametros[0]+","+parametros[1]+","+parametros[2]);  
			bw.flush();
    	}
		scanner.close(); //o fechamendo do scanner ocorre quando nao vou mais utilizalo
		bw.close();
		fw.close();
	}
}
Rsrsrsrs eu esperava que ele chegasse a essa conclusão sozinho, por isso não postei como deveria ficar o código :)
jkrfabio
public static void main(String[] args) throws IOException
	{

		Scanner scanner = new Scanner(new FileReader("arquivo.txt"));
	
        File arquivo = new File("inserts.txt");
        FileWriter fw = new FileWriter(arquivo);
        BufferedWriter bw = new BufferedWriter(fw);
        
        
		
		while(scanner.hasNext())
		{	

			 	String[] parametros = scanner.nextLine().split("\\|");    
	            System.out.println(parametros[0]);    
	            System.out.println(parametros[1]);    
	            System.out.println(parametros[2]);
	            bw.write("insert into tabela (nome, cidade, idade) values ("+parametros[0]+","+parametros[1]+","+parametros[2]+");");
	    }
		
		bw.close();

	}

Agora rodou perfeitamente!

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

		Scanner scanner = new Scanner(new FileReader("arquivo.txt"));
	
        File arquivo = new File("inserts.txt");
        FileWriter fw = new FileWriter(arquivo);
        BufferedWriter bw = new BufferedWriter(fw);
        
        
		
		while(scanner.hasNext())
		{	

			 	String[] parametros = scanner.nextLine().split("\\|");    
	            System.out.println(parametros[0]);    
	            System.out.println(parametros[1]);    
	            System.out.println(parametros[2]);
	            bw.write("insert into tabela (nome, cidade, idade) values ("+parametros[0]+","+parametros[1]+","+parametros[2]+");");
	    }
		
		bw.close();

	}

Agora rodou perfeitamente!
Marque o tópico como resolvido :slight_smile:

Criado 26 de fevereiro de 2013
Ultima resposta 26 de fev. de 2013
Respostas 13
Participantes 3