texto - Sobreescribiendo archivo txt en java
mostrar el contenido de un archivo txt en java (5)
Se supone que el código que he escrito sobreescribe el contenido del archivo de texto seleccionado, pero lo está agregando. ¿Qué estoy haciendo mal exactamente?
File fnew=new File("../playlist/"+existingPlaylist.getText()+".txt");
String source = textArea.getText();
System.out.println(source);
FileWriter f2;
try {
f2 = new FileWriter(fnew,false);
f2.write(source);
/*for (int i=0; i<source.length();i++)
{
if(source.charAt(i)==''/n'')
f2.append(System.getProperty("line.separator"));
f2.append(source.charAt(i));
}*/
f2.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
EDITAR
Intenté crear un nuevo archivo temp.txt y escribir el nuevo contenido en ese archivo, eliminando este archivo de texto y cambiando el nombre de temp.txt a este. La cosa es que la eliminación siempre es infructuosa. No creo que tenga que cambiar los permisos de usuario para esto, ¿verdad?
Además, una parte de mi programa enumera todos los archivos en este directorio, así que supongo que están siendo utilizados por el programa y por lo tanto no se pueden eliminar. Pero ¿por qué no sobrescrito?
Resuelto
Mi mayor momento "D''oh"! Lo he estado compilando en Eclipse en lugar de cmd, que era donde lo estaba ejecutando. Así que mis clases recién compiladas fueron a la carpeta bin y el archivo de clase compilado a través del símbolo del sistema permaneció igual en mi carpeta src. He recompilado con mi nuevo código y funciona a la perfección.
File fold=new File("../playlist/"+existingPlaylist.getText()+".txt");
fold.delete();
File fnew=new File("../playlist/"+existingPlaylist.getText()+".txt");
String source = textArea.getText();
System.out.println(source);
try {
FileWriter f2 = new FileWriter(fnew, false);
f2.write(source);
f2.close();
} catch (IOException e) {
e.printStackTrace();
}
Añadir una línea más después de inicializar el objeto de archivo
File fnew=new File("../playlist/"+existingPlaylist.getText()+".txt");
fnew.createNewFile();
Esto lo simplifica un poco y se comporta como lo deseas.
FileWriter f = new FileWriter("../playlist/"+existingPlaylist.getText()+".txt");
try {
f.write(source);
...
} catch(...) {
} finally {
//close it here
}
La forma más fácil de sobrescribir un archivo de texto es usar un campo estático público.
esto sobrescribirá el archivo cada vez porque solo utilizará false la primera vez.
public static boolean appendFile;
Úselo para permitir solo una vez a través de la secuencia de escritura para que el campo adjunto del código de escritura sea falso.
// use your field before processing the write code
appendFile = False;
File fnew=new File("../playlist/"+existingPlaylist.getText()+".txt");
String source = textArea.getText();
System.out.println(source);
FileWriter f2;
try {
//change this line to read this
// f2 = new FileWriter(fnew,false);
// to read this
f2 = new FileWriter(fnew,appendFile); // important part
f2.write(source);
// change field back to true so the rest of the new data will
// append to the new file.
appendFile = true;
f2.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Tu código funciona bien para mí. Reemplazó el texto en el archivo como se esperaba y no se adjuntó.
Si desea adjuntar, configure el segundo parámetro en
new FileWriter(fnew,false);
a verdad
Resuelto
Mi mayor momento "D''oh"! Lo he estado compilando en Eclipse en lugar de cmd, que era donde lo estaba ejecutando. Así que mis clases recién compiladas fueron a la carpeta bin y el archivo de clase compilado a través del símbolo del sistema permaneció igual en mi carpeta src. He recompilado con mi nuevo código y funciona a la perfección.
File fold=new File("../playlist/"+existingPlaylist.getText()+".txt");
fold.delete();
//File temp=new File("../playlist/temp.txt");
File fnew=new File("../playlist/"+existingPlaylist.getText()+".txt");
String source = textArea.getText();
System.out.println(source);
/*FileWriter f2;
PrintWriter pw;
try {
f2 = new FileWriter(fnew,false);
pw= new PrintWriter(f2);
f2.write(source);
/*for (int i=0; i<source.length();i++)
{
if(source.charAt(i)==''/n'')
f2.append(System.getProperty("line.separator"));
f2.append(source.charAt(i));
}*/
try {
FileWriter f2 = new FileWriter(fnew, false);
f2.write(source);
f2.close();
//fnew.renameTo(fold);
//fold.renameTo(temp);
//temp.deleteOnExit();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}