Escrevendo e lendo arquivos

Galera, tenho um programa básico que le dados de itens de estoque, como nome, descrição, nivel do estoque, nivel minimo e preço. Todos esses atributos estou na classe ItensEstoque, no qual contem os metodos get´s e set´s. Depois que um objeto é criado, jogo ele para o Array de objetos. O que eu quero fazer é jogar esse dados em um arquivos, por exemplo:
Codigo: 0
Nome : nome0
Descrição: descricao0
Estoque: 000
Estoque minimo: 0
Preço: 000

Codigo: 1
Nome : nome1
Descrição: descricao1
Estoque: 1
Estoque minimo: 1
Preço: 1

Alguem pode me auxiliar como fazer isso ??? E depois como fazer para le o arquivo e apresentar na tela ???

PrintWriter out = new PrintWriter(new FileOutputStream("file.txt"));
out.println(...)
out.close
BufferedReader reader = new BufferedReader(FileReader("file.txt"));
String line = reader.readLine();
reader.close();

vc pode gravar um objeto inteiro assim;

ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("file.txt"));
out.writeObject(itensEstoque);
out.close();
ObjectInputStream out = new ObjectOutputStream(new FileInputStream("file.txt"));
itensEstoque item = out.readObject(itensEstoque);
out.close();

Não está dando certo… tenho q por esse código onde, na principal ?

Dando o seguinte erro :

Exception in thread “main” java.io.NotSerializableException: ItensEstoque
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1054)

    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:278)
    at Prova.main(Prova.java:46)

Sabe oq é ?

Todo bean que você quiser gravar deve implementar a classe Serializable. Ou seja a sua Classe ItemsPedido deve ficar parecida com alguma coisa do tipo:

public class ItensEstoque implements Serializable {
    ...
    ...
    ...
}

ou melhor a interface Serializable

Sorry! :?

Pensei em interface, e escreví classe.

Eu até dei uma pesquisada, e vi que tinha que ter essa interface Serializable, mais não como colocar na classe ItensEstoque.

Teria que ter algo do tipo:

public interface Serializable {

}

É isso, o que mais tem q ter ?

a única coisa que precisa fazer é colocar “implements Serializable” na sua classe ItemsPedido .

isto indica que sua bean poderá fazer o que chamamos de serialização…

só isso.

[quote=“wbsouza”]

[code]
public class ItemsPedido implements Serializable
{

aqui vc continua sua classe normalmente

}
[/code][/quote]

Caros Colegas, tenho um problema. Como posso ter uma classe chamada LerCpfCgc, esta classe irá abrir um arquivo texto que contém CPF e Cgc Válidos e Inválidos. Ter outra classe chamada Utilitarios, esta classa por sua vez irá identificar se é cpf ou cgc e se esses são válidos ou inválidos e depois gravar os válidos em um arquivo de arquivos válidos e os inválidos. Todos os métodos são estáticos e estão prAaticamente prontos porém não consigo fazer com que a classe que le os cpfs e cgcs mandem estes para análise e gravação na classe utilitários

Pessoal sou novo no mundo Java, mas já tenho algumas encrencas pra arrumar, alguem pode me mandar um codigo que leia e compare nome de arquivos e pastas?!?!
Fico no aguardo de uma ajuda.
Obrigado!

veja a classe File.

File f = new File(“teste.txt”);

f… veja os metodos

deve ter o que vc quer

Realmente agora deu certo, consegui gerar o arquivo, mais voce precisa ver oq ele escreveu no arquivo, um monte de caracter estranhos, nem da pra achar oq eu digitei… ta mo esquisito, assim num dianta nada !!

¬í sr ItensEstoqueB¹†HøÂ¦ I CodZ FlagI
NivelAtualI NivelMinF PrecoF TotalItemL Descricaot Ljava/lang/String;L Nomeq ~ xp
Cz t aMonitort aMonitor

Isso que ta no arquivo, alguem sabe pq ???

para ler o arquivo use ObjectInputStream que funciona.

tá tudo certo com o arquivo, de uma pesquisada sobre serialização que vc vai entender…

o que acontece é que as informações não foram gravadas em modo texto, se vc quiser que seja asism use a classe PrintWriter e faça println.
Com o PrintWriter é a mesma coisa do que fazer System.out.println… só que é para arquivos

qualquer dúvida é só perguntar

Ahhh deixa queto !!! Ninguem ta conseguindo me ajudar… dicas pra la, dicas pra ca, mais como faze memo nada…

Valeu a ajuda ai !!! :cry:

no código que lhe passe anteriormente eu mostrei como se faz com o PrintWriter

PrintWriter out = new PrintWriter(new FileOutputStream("file.txt")); 
out.println(...) 
out.close()

Depois de abrir o arquivo, vc faz out.println() igual como se faz System.out.println(), então basta imprimir os valores do seu objeto chamando os métodos get

tente assim,

for(...array de objetos ...)
{
   out.println(seuObjeto.getNome());
   out.println(seuObjeto.getEstoque());
   out.println("------------------------");
}

assim faz em modo texto, é bem simples usar o PrintWriter. É igual fazer System.out.println();

Me ajuda no seguinte, entendi o que é pra fazer segue um trecho do meu código:

//Antes disso eu peço os dados e guardo através do set’s no objeto Itens

write.println("–> Codigo : " + Itens.getCod());
write.println("–> Nome : " + Itens.getNome());
write.println("–> Descricao : " + Itens.getDesc());
write.println("–> Nivel Atual : " + Itens.getNivelAtual());
write.println("–> Nivel Minimo : " + Itens.getNivelMin());
write.println("–> Preco : " + Itens.getPreco());
write.println("---------------------------------------------");
write.close();

Seria isso né ?

Se for me ajuda a criar uma outra classe por ser Arquivo onde teria os métodos de escreita e leitura do arquivo e passaria como parâmetro o objeto Itens, tem jeito ???

está certo como fez…

vc pode fazer algo assim:

public class Arquivo
{
	private String nameFile;
	private PrintWriter write;
	private BufferedReader reader;
	
	public Arquivo(String nameFile)
	{
		this.nameFile = nameFile;
	}
	
	public void write(ItensEstoque item)
	{
		write = new PrintWriter(new FileOutputStream(nameFile));

		write.println("--> Codigo : " + item.getCod()); 
		write.println("--> Nome : " + item.getNome());
		
		write.close();
	}
	
	public ItensEstoque read()
	{
		reader = new BufferedReader(new FileReader(nameFile));
		ItensEstoque item;
		String line = null;
		while ( (line = reader.readLine()) != null)
		{
			System.out.println(line);
			// agora vc precisa fazer uma parser para recuperar
			//somente o que quiser
			item.setCod(...);
			item.setNome(...);
		}

                                reader.close();                                

		return item;
	}
}

Isso mesmo… tava errando uma coisa no método de escrever, mais agora ta beleza.

Agora no método de ler num intendi, num caiu a ficha:

Tipo, pq criou um método para retornar o objeto Itens, num saquei ? e pq usa os métodos de set’s dentro desse método ?

vc vai ler do arquivo certo ?

ao fazer readLine() ele retorna a linha que vc escreveu:
vai retornar algo assim: “Codigo : 1” mas vc precisa somente do número 1.

eu fiz retornar um objeto porque ao ler do arquivo, vc cria um novo objeto
new ItensEstoque()… e depois da um “set” em todas as propriedades, então o objeto vai estar preenchido e pronto para ser retornado.

então fora do método, de quem o chamou, vc pode recuperar o objeto assim
ItensEstoque item = arquivo.read(); // le do arquivo e retorna um objeto
veja que seria melhor retornar uma lista

blz ?

Ahhhhhhh, agora saquei… mas agora não faço a mínima ideía de como pegar somente o 1 do “–> Codigo: 1”, poderia me ajudar. Me ajudando nesse acho que consigo fazer nos outros atributos.

Se num for abusa muito, como seria criar uma lista ? Como ficaria o código ?

Ahhh, ta dando erro na classe Arquivo que voce crio:

C:j2sdk1.4.1_02arquivos_javaFulanoArquivo.java:15: unreported exception java.io.FileNotFoundException; must be caught or declared to be thrown
write = new PrintWriter(new FileOutputStream(NomeArquivo));

java.io.FileNotFoundException

vc precisa colocar tudo em um bloco try{}catch(Exception e){}

quanto a Lista crie um ArrayList e chame o método add(Object) para adicionar as instacias que vc criar… então retorne a lista ao invés de um objeto apenas

quanto ao arquivo utilize a classe StringTokenizer