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();
}
}
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