Arquivos

Como faço para que cada vez que eu execute o método inserir ele adiciona no final do arquivo, nao substituindo o que estiver la?

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

public class Arquivos {

	private ObjectOutputStream output;
	
	public void inserir(){
		try {
			File filename = new File("teste.dat");
			output = new ObjectOutputStream(new FileOutputStream(
					filename));
			output.writeObject("Teste");
			output.flush();
			output.close();
		} catch (IOException e) {
			// erro ao abrir
		}
	}
	
	public static void main(String[] args) {
		new Arquivos().inserir();
	}
}

Olá, use o RandomAccessFile pra fazer isso:

De uma olhada em:
http://www.google.cm.br/search?q=using+RandomAccessFIle&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:pt-BR:unofficial&client=firefox-a

e:
http://exampledepot.com/egs/java.io/UseRandomAccessFile.html

ok ?

Consegui fazer ele gravar, agora n consigo ler o que foi gravado…

Metodo para gravar

try {
	File filename = new File("teste.dat");
	raf = new RandomAccessFile(filename, "rw");
	raf.seek(filename.length());
} catch (IOException e) {
	JOptionPane.showMessageDialog(null,
		"Erro ao abrir o arquivo", "Erro",
		JOptionPane.ERROR_MESSAGE);
	d.dispose();
}
try {
	raf.writeChars("Teste");
} catch (IOException e) {
	JOptionPane.showMessageDialog(null,
		"Erro ao escrever o nome no arquivo", "Erro",
		JOptionPane.ERROR_MESSAGE);
	d.dispose();
        raf.close();
}

No interior do arquivo esta ± assim:

[]T[]e[]s[]t[]e[]T[]e[]s[]t[]e[]2

O método que estou tentando fazer para ler

try {
	File filename = new File("teste.dat");
	input = new ObjectInputStream(new FileInputStream(filename));
} catch (IOException e) {
	System.out.println("Erro abrindo arquivo");
}
try {
	File filename = new File("teste.dat");
	raf = new RandomAccessFile(filename, "r");
	// aqui nao sei o que fazer para ler
} catch (FileNotFoundException e) {
	return;
} catch (IOException e) {
	System.out.println("Erro abrindo arquivo");
}

Use a classe FileOutputStream para gravar o arquivo. Você deve usar o construtor new FileOutputStream(“teste.txt”, true) no caso o true é para adicionar os dados ao final do arquivo e não substituí-lo.

O código deve ficar mais ou menos assim:

Gravar:

FileOutputStream fos = new FileOutputStream(new File("teste.txt"), true);
String str = "Hello";
byte[] data;
data = str.getBytes();
fos.write(data);
fos.flush();

Ler:

FileInputStream fis = new FileInputStream(new File("teste.txt"));
int val = 0;
String str = "";
while ((val = fis.read()) != -1) {
     str += (char) val;
}
System.out.println(str);

Peguei um exemplo de como ler o arquivo gerado.

public void ler() throws Exception{  
         ObjectInputStream in = new ObjectInputStream(new FileInputStream("teste.dat"));  
         ArrayList<PessoaVO> pacientes = (ArrayList<PessoaVO>)in.readObject();  
   
         for(PessoaVO p:pacientes){  
             System.out.println("Nome: " + p.getNome());  
             System.out.println("Idade: " + p.getIdade());  
         }  
     }

Acontece que ele le somente um registro, se tiver mais registros gravados, ele so me retorna um. O que deve mudar para que liste todos?

Abaixo o arquivo .dat