¿Por qué se elimina este archivo data.txt cada vez que reinicio el programa?
Pregunta
Tengo un archivo txt simple que guardará solo 1 palabra, pero cada vez que reinicio el programa todo dentro del data.txt se elimina, ¿no sé por qué?
Todo el código de clase:
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
public class InfoSaver {
File data = new File("data.txt");
FileOutputStream fos;
PrintStream writer;
FileInputStream fis;
DataInputStream reader;
public void init() throws IOException{
fos = new FileOutputStream(data);
writer = new PrintStream(fos);
fis = new FileInputStream(data);
reader = new DataInputStream(fis);
}
public void writeData(String info) {
writer.println(info);
}
public String readData() throws IOException{
return reader.readLine();
}
public void close() throws IOException{
writer.close();
reader.close();
}
}
Solución
No está agregando nueva información al archivo, lo está sobrescribiendo.
Cada vez que lo abras en el
fos = nuevo FileOutputStream (datos);
Comando, se vacía, no importa si ha guardado algo dentro o no.
Otros consejos
Para agregar a un archivo existente en lugar de sobrescribirlo, use el constructor de FileOutputStream que le permita abrirlo en modo de agregado.
fos = new FileOutputStream(data, true);
Por esta línea:
fos = new FileOutputStream(data);
Esta versión del constructor de FileOutputStream superará el archivo, pero podría usar Esta versión:
public FileOutputStream(File file,
boolean append)
throws FileNotFoundException
Tendría que especificar que desea agregar al archivo configurando el append
hacer true
.
Su FileOutputStream
está sobrescribiendo su archivo. Si desea agregar al final del archivo, debe especificar eso:
fos = new FileOutputStream(data, true);
Cuando te encuentras con un comportamiento inesperado, es una buena idea verificar la API para asegurar que las funciones que llamas estén haciendo lo que espera. Aquí está la API Para el FileOutputStream
constructor.