Gravação em Arquivo TXT

[quote]Pessoal fiz a seguinte classe no java, produto com o seus atributos e métodos, e o método para gravar e ler o arquivo.
Só que não estou conseguindo fazer uma classe especifica para ler o arquivo e para gravar o arquivo.
Fiz uma classe para cada e herdei da minha classe produto, só que quando eu vou add os valores vao tudo como null.
Estou querendo fazer uma classe para leitura e outra para gravar, e chamar no método MAIN.

Ha ponto importante tbm que so conseguir mandar os valores sendo todos string, não conseguir mandar como int e double[/quote]

[code]package br.com.Miquilino.trabalho;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.JOptionPane;

public class CadastraProdutoMain {

public static void main(String[] args) {
	
	Produto cad = new Produto();
	
String cod = JOptionPane.showInputDialog("Informe o codigo do produto");
String nome = JOptionPane.showInputDialog("Informe o nome do produto");
String valor = JOptionPane.showInputDialog("Informe o valor do produto");
	
	cad.setCodProduto(cod);
	cad.setNomeProd(nome);
	cad.setValorProd(valor);
	
	cad.criarArquvio();
	
	

}

}
[/code]

[code]package br.com.Miquilino.trabalho;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.JOptionPane;

public class Produto {

private String codProduto;
private String nomeProd;
private String valorProd;



public String getCodProduto() {
	return codProduto;
}
public void setCodProduto(String codProduto) {
	this.codProduto = codProduto;
}
public String getNomeProd() {
	return nomeProd;
}
public void setNomeProd(String nomeProd) {
	this.nomeProd = nomeProd;
}
public String getValorProd() {
	return valorProd;
}
public void setValorProd(String valorProd) {
	this.valorProd = valorProd;
}


public void criarArquvio(){
	File arquivo = new File("C:\\dados\\produto.txt");
	
	try{
		if(!arquivo.exists()){
			//cria um arquivo vazio
			arquivo.createNewFile();
		}
		
		//caso seja um diretorio, é possivel listar seus arquivos e diretórios 
		File[] arquivos = arquivo.listFiles();
		
		//escrever no arquivo
		FileWriter fw = new FileWriter(arquivo, true);
		
		BufferedWriter bw = new BufferedWriter(fw);
		
		bw.write(this.getCodProduto() +  ";");
		bw.write(this.getNomeProd() +    ";");
		bw.write(this.getValorProd() + "");
		
		bw.newLine();
		
		bw.close();
		fw.close();
		 
		
		//faz a leitura do arquivo
		FileReader fr = new FileReader(arquivo);
		
		BufferedReader br = new BufferedReader(fr);
		
		//enquanto houver mais linhas
		while(br.ready()){
			//le a proxima linha
			String linha = br.readLine();
			
			
			//faz algo com a linha
			System.out.println(linha);
			 
			//JOptionPane.showMessageDialog(null, linha);
		}
		
		br.close();
		fr.close();
		

		
	}catch(IOException ex){
		ex.printStackTrace();
	}
}

}
[/code]

Voce criar uma classe generica

crie a classe gravarTxt algo assim

crie um metodo que grava e um que le

os metodos precisam receber a localizacao do arquivo e o que ele deve gravar se for para gravar o arquivo

entendeu ?

[quote]entao CristianPalmaSola10 eu fiz a classe principal, ai fiz uma classe produto com os métodos, nome, cod e preço até aqui tudo bem…
ai fiz uma outra classe que chama cadProduto, ai herdei da classe produto, so que nao hora de gravar, gravar como null…[/quote]

[code]package br.com.Teste.Cadastro;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class cadProduto extends Produto {

public void criarArquvio(){
	File arquivo = new File("C:\\dados2\\produto.txt");
	
	try{
		if(!arquivo.exists()){
			//cria um arquivo vazio
			arquivo.createNewFile();
		}
		
		//caso seja um diretorio, é possivel listar seus arquivos e diretórios 
		File[] arquivos = arquivo.listFiles();
		
		//escrever no arquivo
		FileWriter fw = new FileWriter(arquivo, true);
		
		BufferedWriter bw = new BufferedWriter(fw);
		
		bw.write(this.getCodProd() +  ";");
		bw.write(this.getNome() +    ";");
		bw.write(this.getValorProd() + "");
		
		bw.newLine();
		
		bw.close();
		fw.close();
		 
		
		//faz a leitura do arquivo
		FileReader fr = new FileReader(arquivo);
		
		BufferedReader br = new BufferedReader(fr);
		
		//enquanto houver mais linhas
		while(br.ready()){
			//le a proxima linha
			String linha = br.readLine();
			
			
			//faz algo com a linha
			System.out.println(linha);
			 
			//JOptionPane.showMessageDialog(null, linha);
		}
		
		br.close();
		fr.close();
		

		
	}catch(IOException ex){
		ex.printStackTrace();
	}
}

}[/code]

Claro que grava essa sua classe deve gravar mas naum herdar de produto, estude um pouco de heranca , na minha opiniao deveria haver apenas um parametro do tipo string para seja o que deve sergravado


public class GravarArquivo {  
  
      
    public void criarArquvio(String textoArquivo, String localizacao){  
        File arquivo = new File(localizacao);  
          
        try{  
            if(!arquivo.exists()){  
                //cria um arquivo vazio  
                arquivo.createNewFile();  
            }  
              
            //caso seja um diretorio, é possivel listar seus arquivos e diretórios   
            File[] arquivos = arquivo.listFiles();  
              
            //escrever no arquivo  
            FileWriter fw = new FileWriter(arquivo, true);  
              
            BufferedWriter bw = new BufferedWriter(fw);  
              
            bw.write(textoArquivo);  
              
            bw.newLine();  
              
            bw.close();  
            fw.close();  
               
              
            //faz a leitura do arquivo  
            FileReader fr = new FileReader(arquivo);  
              
            BufferedReader br = new BufferedReader(fr);  
              
            //enquanto houver mais linhas  
            while(br.ready()){  
                //le a proxima linha  
                String linha = br.readLine();  
                  
                  
                //faz algo com a linha  
                System.out.println(linha);  
                   
                //JOptionPane.showMessageDialog(null, linha);  
            }  
              
            br.close();  
            fr.close();  
              
      
              
        }catch(IOException ex){  
            ex.printStackTrace();  
        }  
    }  
}  

acho que iisso funciona, estude heranca

porque fica bulo

porque voce tinha um produto populado e na hora de gravar voce criava uma instacia da classe de gravacao mas que extendia o produto, entao esta classe tinha todos atributos e metodos do produtos mas com valor null porque esta classe tinha acabado de ser criada…

[quote]acho que eu sou muito burrinho, eu to querendo fazer um programa q cadastra produto, codProd, nomeProd, ValorProd.
ai eu add ai nessa classe q vc passou por parametro, so que agora ta dando erro na variavel bw.write(textoArquivo). aff
tenho que entregar esse trabalho hj. mas esta complicado[/quote]

[code]package br.com.Teste.Cadastro;

import javax.swing.JOptionPane;

public class MainCadastro {

public static void main(String[] args) {

	Produto prod = new Produto();
	
	int cod = Integer.parseInt(JOptionPane.showInputDialog("Informe o cod do produto"));
	String nome = JOptionPane.showInputDialog("Informe o nome do produto");
	double valor = Double.parseDouble(JOptionPane.showInputDialog("Valor do produto"));
	
	prod.setCodProd(cod);
	prod.setNome(nome);
	prod.setValorProd(valor);
	
	gravaArquivo cadastra = new gravaArquivo();
	cadastra.criarArquvio(cod,nome,valor,  "C:\\dados2\\produto.txt");
	

	//cadProduto cadastra = new cadProduto();
	//cadastra.criarArquvio();
}

}[/code]

[code]package br.com.Teste.Cadastro;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class gravaArquivo {

    public void criarArquvio(int cod, String nome, double valor,  String localizacao){    
        File arquivo = new File(localizacao);    
            
        try{    
            if(!arquivo.exists()){    
                //cria um arquivo vazio    
                arquivo.createNewFile();    
            }    
                
            //caso seja um diretorio, é possivel listar seus arquivos e diretórios     
            File[] arquivos = arquivo.listFiles();    
                
            //escrever no arquivo    
            FileWriter fw = new FileWriter(arquivo, true);    
                
            BufferedWriter bw = new BufferedWriter(fw);    
                
           
			bw.write(textoArquivo);    
                
            bw.newLine();    
                
            bw.close();    
            fw.close();    
                 
                
            //faz a leitura do arquivo    
            FileReader fr = new FileReader(arquivo);    
                
            BufferedReader br = new BufferedReader(fr);    
                
            //enquanto houver mais linhas    
            while(br.ready()){    
                //le a proxima linha    
                String linha = br.readLine();    
                    
                    
                //faz algo com a linha    
                System.out.println(linha);    
                     
                //JOptionPane.showMessageDialog(null, linha);    
            }    
                
            br.close();    
            fr.close();    
                
        
                
        }catch(IOException ex){    
            ex.printStackTrace();    
        }    
    }    
}    

[/code]

[quote=bruce1010][quote]acho que eu sou muito burrinho, eu to querendo fazer um programa q cadastra produto, codProd, nomeProd, ValorProd.
ai eu add ai nessa classe q vc passou por parametro, so que agora ta dando erro na variavel bw.write(textoArquivo). aff
tenho que entregar esse trabalho hj. mas esta complicado[/quote]

[code]package br.com.Teste.Cadastro;

import javax.swing.JOptionPane;

public class MainCadastro {

public static void main(String[] args) {

	Produto prod = new Produto();
	
	int cod = Integer.parseInt(JOptionPane.showInputDialog("Informe o cod do produto"));
	String nome = JOptionPane.showInputDialog("Informe o nome do produto");
	double valor = Double.parseDouble(JOptionPane.showInputDialog("Valor do produto"));
	
	prod.setCodProd(cod);
	prod.setNome(nome);
	prod.setValorProd(valor);
	
	gravaArquivo cadastra = new gravaArquivo();
	cadastra.criarArquvio(cod,nome,valor,  "C:\\dados2\\produto.txt");
	

	//cadProduto cadastra = new cadProduto();
	//cadastra.criarArquvio();
}

}[/code]

[code]package br.com.Teste.Cadastro;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class gravaArquivo {

    public void criarArquvio(int cod, String nome, double valor,  String localizacao){    
        File arquivo = new File(localizacao);    
            
        try{    
            if(!arquivo.exists()){    
                //cria um arquivo vazio    
                arquivo.createNewFile();    
            }    
                
            //caso seja um diretorio, é possivel listar seus arquivos e diretórios     
            File[] arquivos = arquivo.listFiles();    
                
            //escrever no arquivo    
            FileWriter fw = new FileWriter(arquivo, true);    
                
            BufferedWriter bw = new BufferedWriter(fw);    
                
           
			bw.write(textoArquivo);    
                
            bw.newLine();    
                
            bw.close();    
            fw.close();    
                 
                
            //faz a leitura do arquivo    
            FileReader fr = new FileReader(arquivo);    
                
            BufferedReader br = new BufferedReader(fr);    
                
            //enquanto houver mais linhas    
            while(br.ready()){    
                //le a proxima linha    
                String linha = br.readLine();    
                    
                    
                //faz algo com a linha    
                System.out.println(linha);    
                     
                //JOptionPane.showMessageDialog(null, linha);    
            }    
                
            br.close();    
            fr.close();    
                
        
                
        }catch(IOException ex){    
            ex.printStackTrace();    
        }    
    }    
}    

[/code]

[/quote]