Dúvidas para controle de objetos em um arquivo

12 respostas
GraveDigger

E ae galera, blz?

Tenho a seguinte dúvida :

Tenho um programa q gera um arquivo composto por :

 da conta ( int )

Primeiro nome da pessoa ( String )

Ultimo nome ( String )

Saldo ( double )

Nesse arquivo são gravados alguns registros nesse formato.

Gostaria de saber como posso consultar determinados campos ( por exemplo o campo “primeiro nome” da conta número 10 )

Lembrando q eh um arquivo sequencial, não posso usar RandomAccess.

Preciso saber também como posso, pegando de um arquivo externo ( no mesmo formato ) fazer essa consulta.

Valeu

[]'s

12 Respostas

kina

Seu arquivo está ordenado? Se sim, ordenado por o que?
Qual o tamanho do arquivo.
Já tentou fazer um “full-scan”??
Ou ao carregar o sistema jogar tudo isso em um Map???

GraveDigger

kina

Meu arquivo está ordenado por número de conta, em ordem crescente partindo do 1.

Tamanho do arquivo em q sentido? tamanho total do arquivo .dat criado?

Desconheço “full-scan” ou map, como estou estudando pela apostila dos deitel, soh uso o q jah foi visto ateh então, mas agradeceria imensamente se vc pudesse me explicar sobre esse full-scan .

[]'s

kina

Vamos lá:
Quantos registros existem nesse seu arquivo?
Já pensou em gerar um Bean para eles?
Tente usar o Set.
Set seria um array que não deixa repetir os registros.
Quando você criar seu Bean você tem que fazer um overriding do método equals(Object).

“Full-scan” foi um modo de dizer. Seria percorrer todos os seus dados. para encontrar o que você quer.

Outra pergunta.
Esses seus registros não tem furos?
Por exemplo
Nº da conta é sequencial?
1,2,3,4,5,6,7,8,9…
OU tem furos?
1,2,5,9,11,12

GraveDigger

Bom, existem 10 registros no meu arquivo.

Não, não há furos no registro.

Desconheço Bean

Então kina, era esse “full-scan” q eu precisava saber como faz.

Gostaria de saber como o Java mantêm esse controle dos registros.

Pensei q tivesse algum código q definisse cada registro dentro do arquivo, seria bem interessante pra mim.

Lembrando que, nesse exercício, além de ter o controle dos registros dum arquivo q eu estou criando no hora, preciso de acesso a registros de um outro arquivo, para comparar o que estou criando agora com o que jah está pronto.

Valeu pela paciência kina :mrgreen:

kina

Ficar fazendo acesso I/O é muito custoso, eu acho interessante se você mantesse tudo na memória, sendo que são poucos registros.

Você pode usar a classe File ( http://java.sun.com/j2se/1.5.0/docs/api/java/io/File.html ) para pegar quando foi a última alteração do arquivo.
usar o BufferedReader ( http://java.sun.com/j2se/1.5.0/docs/api/java/io/BufferedReader.html ) para pegar uma linha completa (representação de um registro, neste caso)

usar um HashMap ( http://java.sun.com/j2se/1.5.0/docs/api/java/util/HashMap.html ) para armazenar seus dados.

Toda vez que você fosse “pegar” um registro, você compara a última modificação para ver se foi alterado alguma coisa, se sim, você recarrega os dados, senão utiliza o que está na memória.

Falou

GraveDigger

Kina,

Tentei usar o BufferedReader, porém, ele não lê o objeto, apenas algumas partes, usei o readLine como sugerido, porém ele retorna um string estranho e como minha classe requer um array de string para o registro, não funcionou, alguma outra sugestão?

ps: ainda naum usei o hashmap, mas vou dar uma lida a respeito agora.

[]'s

kina

Cara, manda ai um linha do seu arquivo!
Como é que está formatado??

GraveDigger

São 4 TextFields

1 - Account ( int )

2 - First Name ( String )

3 - Last Name ( String )

4 - Balance ( double )

E a linha que retorna quando uso um readLine é :

¬í sr "com.deitel.jhtp.ch16.AccountRecord‘+=J?f¯ I accountD balanceL firstNamet Ljava/lang/String;L lastName
q~xp @[Ç

Esse com.deitel… eh o nome do package de onde estou importando a classe AccountRecord de serializa meu arquivo, não entendi akeles caracteres estranhos…

Bom, eh isso q está saindo, se precisar de mais informações eh soh avisar.

[]'s

kina

deixe ver se eu entendi.
Você tem um programa que já serializa uma classe pra você certo?
Se sim você nao precisa usar esse BuffferedReader…
Use o ObjectInputStream ( http://java.sun.com/j2se/1.5.0/docs/api/java/io/ObjectInputStream.html )

p5f8

hummm…interessante… o modo como vocë resolveu o seu problema.
Já pensou em usar o Prevayler?

Sei que esta msg tá meio vazia…só gerei mais dúvidas… mas… gerei alguma coisa. heheheh

kina

Exemplo de prevayler:
http://www.guj.com.br/java.tutorial.artigo.46.1.guj

GraveDigger

Galera, resolvi o problema.

Passei tudo prum array ( inclusive o arquivo externo ) e os comparei.

Acabou dando tudo certo.

valeu pela ajuda e paciência

[]'s

Criado 12 de julho de 2005
Ultima resposta 15 de jul. de 2005
Respostas 12
Participantes 3