Não consigo escrever arquivo

1 resposta
D
package Prod;

public class Produto {
	
	private int codigo;//4 bytes
	private double valor;//8 bytes
	private String nome;// nome ate 40 letras = 80 bytes
	public static int tamnome = 40;
	public static int tamdados = 4 + 8 + 80;

	public Produto(String nome, double valor, int codigo){
		this.nome = nome;
		this.valor = valor;
		this.codigo = codigo;
	}
	public Produto() {
		super();
		// TODO Auto-generated constructor stub
	}
	
	public String getNome(){
		return nome;
	}
	@Override
	public String toString() {
		return "Produto [codigo=" + codigo + ", valor=" + valor + ", nome="
				+ nome + "]";
	}

	public void setNome(String nome){
		this.nome = nome;
	}
	
	public int getCodigo(){
		return codigo;
	}
	public void setCodigo(int codigo){
		this.codigo = codigo;
	}
	
	public double getValor(){
		return valor;
	}
	public void setValor(double valor){
		this.valor = valor;
	}
}

package Prod;

import java.io.EOFException;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.ArrayList;
import java.util.List;


public class Manipula {
	private RandomAccessFile RAF_Produto;
	private List<Produto> Lista_de_Produto;
	private final int CodigoInicial = 1001;
	private String Caminho_Produto;
	
	public Manipula(String Caminho_P){
		Caminho_Produto = Caminho_P;
		try{
			RAF_Produto = new RandomAccessFile(Caminho_Produto, "rw");
		}catch(FileNotFoundException e){
			e.printStackTrace();
		}
	}
	
	public List<Produto> getLista_de_Produtos() {
		atualizarListaProduto();
		return Lista_de_Produto;
	}
	
	private void atualizarListaProduto(){
		try // lê um registro e exibe
	{
		abrirEFechar();
		RAF_Produto.seek( 0 );
		Lista_de_Produto= new ArrayList<Produto>();
		
		while (true) {				
			Produto P = produto_ler();
			if(P.getCodigo()!=0)
				Lista_de_Produto.add(P);
		} 
	}
	catch (EOFException eofException)
	{
		return; 
	} 
	catch (IOException ioException) {
		ioException.printStackTrace();
		System.out.println("Erro ao ler o arquivo.");
		System.exit(1);
		} 

	}
	
	private Produto produto_ler() throws IOException {
		Produto P = new Produto();
		P.setCodigo(RAF_Produto.readInt());
		P.setNome(produto_lerNome());	

		P.setCodigo(RAF_Produto.readInt());
		P.setValor(RAF_Produto.readDouble());
		return P;
	}
	
	private String produto_lerNome() throws IOException {
		char nome[] = new char[Produto.tamnome], temp;

		for (int i = 0; i < nome.length; i++) {
			temp = RAF_Produto.readChar();
			nome[i] = temp;
		} 
		return new String(nome).replace('\0', ' ');
	}

	private void abrirEFechar() throws IOException
	{
		if(RAF_Produto!=null)
			RAF_Produto.close();
				
		RAF_Produto= new RandomAccessFile(Caminho_Produto, "rw");
	}
	
	public void fecharArquivo() throws IOException {
		if (RAF_Produto != null)
			RAF_Produto.close();
}
	public void produto_criarproduto(Produto P){
		P.setCodigo(Integer.parseInt(String.valueOf(produto_obterID())));
		try{
			RAF_Produto.seek((P.getCodigo()-CodigoInicial)*Produto.tamdados);
			if(produto_escrever(P)){
				System.out.println(("Cadastrado") + P.toString());
			}else
				System.out.println("Erro1");
		}catch(IOException e){
			System.out.println("Erro2");
		}
	}
	
	private long produto_obterID(){
		try{
			long tam;
			tam = RAF_Produto.length();
			return CodigoInicial+(tam/Produto.tamdados);
		}catch(IOException e){
			e.printStackTrace();
			return -1;
		}
		
	}
	
	private boolean produto_escrever(Produto P){
		try{
			RAF_Produto.writeInt(P.getCodigo());
			produto_escreverNome(P.getNome());
			RAF_Produto.writeDouble(P.getValor());
		}catch(IOException e){
			e.printStackTrace();
			return false;
		}
		return false;
	}
	
	private void produto_escreverNome(String nome)throws IOException{
		StringBuffer buffer = null;
		if(nome!=null)
			buffer = new StringBuffer(nome);
		else
			buffer = new StringBuffer(Produto.tamnome);
			buffer.setLength(Produto.tamnome);
			RAF_Produto.writeChars(buffer.toString());
	}
	
}


package Prod;

import java.util.Scanner;

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner entrada = new Scanner(System.in);
		Manipula M = new Manipula("Produtos.txt");
		Produto Novo = new Produto();
		//Dependente NovoD = new Dependente();
		
		//int opcao=0,opcao1 = 0;
		//for (int x=0;x<10;x++){
		Novo.setNome("Bernardo ");
		Novo.setCodigo(1001);
		Novo.setValor(500);
		M.produto_criarproduto(Novo);
		//}
	}

}

1 Resposta

romarcio

Da uma olhada nesse tutorial Manipulando Arquivo Txt com Java
Acho que faltou você chamar o método flush() antes de fechar o arquivo.

Criado 4 de abril de 2013
Ultima resposta 4 de abr. de 2013
Respostas 1
Participantes 2