Estrutura da dados em Java

Estou aprendendo a mexer com arquivos em java… e estou usando RandomAccessFile…
so que estou com varios problemas, porque estou acostumado em mexer com arquivos em C++ e to sintindo falta de algumas coisas…

:arrow: Como gravo em modo binario???

:arrow: Quando vou gravar um objeto faço:

randomFile.writeInt( quantos );
randomFile.writeInt( id );
randomFile.writeChars( name );
randomFile.writeChars( last );[/code]
nao tem como eu grava meu objeto msm??? ex: randomFile.writeObject( objectname ). 

 :arrow: como declaro uma variavel para ele nao ser serializada?
ex:
[code]private int id;
	private String name;
	private String last;
	private static int quantos;

nao queria que esse quantos fosse gravado quando mandase o objecto para ser gravado em arquivo.

:arrow: Como abro um arquivo e posiciono o apantador ponteiro de gravacao apontar para o final do arquivo… Tipo quando estou querendo acrescentar um registro.

:arrow: Como abro um arquivo sem perder o que ja esta dentro dele?

**Estou usando como base de estudo o livro do deitel&deitel… Mas pelo que ja vi ele eh muito ruim nessa parte… Pois so ensina a criar arquivos com um total de registros… ex: 100 registros … ae depois voce fica apenas manipulando…
Eu estou fazendo um programa do Estilo cadastro: Add, Del, Update, Pesquisar… coisas simples com arquivos que ja estou acostumado em fazer em c++… so que em java to sentindo falta de uma funcoes…
Alguem ae mexe com arquivos e tem algum tutorial o exemplo pra me passar??? RandomAccessFile e a classe certa para eu fazer isso ou tem algo melhor?

Exemplos seria de grande ajuda.
Obrigado.

[quote=“Hempx”]Estou aprendendo a mexer com arquivos em java… e estou usando RandomAccessFile…
so que estou com varios problemas, porque estou acostumado em mexer com arquivos em C++ e to sintindo falta de algumas coisas…

:arrow: Como gravo em modo binario???
[/quote]
Usando qualquer OutputStream, para texto voce usa um Writer.

Da uma olhada em ObjectInputStream e ObjectOutputStream.

Use transient:

 private transient String name; 

FileWriter e FileOutputStream tem a opção de você dizer se quer abrir para append ou não:

new FileWriter("arquivo", true); 
new FileOutputStream("arquivo, true);

[quote=“Hempx”]
:arrow: Como abro um arquivo sem perder o que ja esta dentro dele?

Exemplos seria de grande ajuda.
Obrigado.[/quote]

Usando um FileReader, FileInputStream ou RandomAccessFile ou passando true para o FileWriter ou o FileOutputStream.

hehe…
ajudou muito louds :lol: :lol:
vlws !!!

Dá uma olhadinha nesse exemplo!!!
import java.io.;
import java.util.
;

[code]
class GravaDados implements Serializable{
private ArrayList Jogadores = new ArrayList();
private ArrayList Campeonatos = new ArrayList();
private String apelido;

public GravaDados(){
Jogadores = this.leJogador();
}

public void cadastrarJogador(String nome, String apelido){
Jogadores.add(new Jogador(nome, apelido));
this.gravaArrayJogadores();
}

public void leCampeonato(){
Torneio camp = new Torneio();
try{
ObjectInputStream input = new ObjectInputStream(new FileInputStream(“Arquivo_Campeonato.arq”));
Campeonatos = (ArrayList) input.readObject();
input.close();
}catch (Exception e){
}
}

public void gravaCampeonato(Torneio camp){
try{
Campeonatos.add(camp);
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(“Arquivo_Campeonato.arq”));
out.writeObject(Campeonatos);
out.close();
}catch(Exception e){
}
}

public ArrayList leJogador(){
try{
ObjectInputStream input = new ObjectInputStream(new FileInputStream(“Arquivo_Jogador.arq”));
Jogadores = (ArrayList) input.readObject();
input.close();
}catch (Exception e){
}
return Jogadores;
}

public void gravaJogador(Jogador jogador){
try{
for(int i = 0; i < Jogadores.size(); i++){
Jogador jog = (Jogador)Jogadores.get(i);
if(jog.getApelido().equals(jogador.getApelido())){
Jogadores.remove(i);
Jogadores.add(jogador);
}
else{
Jogadores.add(jogador);
}
}
this.gravaArrayJogadores();
}
catch(Exception e){
}
}

private void gravaArrayJogadores(){
try{
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(“Arquivo_Jogador.arq”));
out.writeObject(Jogadores);
out.close();
}catch(Exception e){
}
}

public boolean verificaJogador(String apelido){
boolean existe = false;
for(int i = 0; i < Jogadores.size(); i++){
Jogador jogador = (Jogador)Jogadores.get(i);
if(apelido.equals(jogador.getApelido())){
existe = true;
}
}
return existe;
}

public Jogador getJogador(){
Jogador cadJogador = new Jogador();
for (int i = 0; i < Jogadores.size(); i++) {
Jogador jogador = (Jogador)Jogadores.get(i);
if (apelido.equals(jogador.getApelido())) {
cadJogador = jogador;
}
}
return cadJogador;
}

public void remover(String apelido){
for(int i = 0; i < Jogadores.size(); i++){
Jogador jogador = (Jogador)Jogadores.get(i);
if(apelido.equals(jogador.getApelido())){
Jogadores.remove(i);
}this.gravaArrayJogadores();
}
}

public String getNome(){
String nome = new String();
for(int i = 0; i < Jogadores.size(); i++){
Jogador jogador = (Jogador) Jogadores.get(i);
if (jogador.getApelido() == apelido)
nome = jogador.getNome();
}
return nome;
}

public String getApelido(int i){
Jogador jogador = (Jogador)Jogadores.get(i);
return jogador.getApelido();
}

public int getTamanhoJogadores(){
return Jogadores.size();
}

public int getTamanhoCampeonato(){
return Campeonatos.size();
}

}[/code]

Legal lorena…
vlws…
voce usa uma ArrayList e carrega sempre o arquivo todo em uma Lista na memoria???
entao se voce quer adcionar um novo jogador voce le tudo pra memoria… muda na memoria… depois grava tudo de novo ne???

achei interessante… caso nao for isso alguem me informe…

eu li os docs… e achei muito paia porque nao achei nada sobre como usar ObjectOutputStream ou OBjectInputStream com RandomAccessFile …
e essa porra de arquivo sequencial grava limpando o arquivo ou no final…
entao fica foda de dar update e remover registro. Como o que estou fazendo e coisa com no maximo uns 100 registros… isso deve ser aceitavel ne? vou fazer desse jeito que voce falou… vlws

ah so mais uma coisa…
Jogador
e Campeonato tem de implementar serializacao?

Olá,

Tudo bem? Sim, eles tem que usar ... implements serializable. Eu acho que dá pra fazer, a quantidade de registro é pequena. Você estava tentando gravar num banco? Com o banco seria melhor para fazer updates, remover, etc…
E então?
Até mais,

[O programa esta em um banco de dados…
estou passando ele para arquivo…
porque o programa acessava o banco de dados apenas localmente…
e o programa eh um programa totalmente Desktop…
entao para uma pessoa que for instalar meu programa… ter de instalar o mysql para apenas pesquisa simples… tenho no maximo umas 5 tabelas…
e eles com certeza ficarao menores que 100 registros…

isso vai resolver de mais Lorena… muito obrigado msm…
Ae depois quando tiver mais tempo passo meu programa para RandomAccessFile…