txt texto sobreescribir por mostrar modificar linea leer fichero escribir ejemplo contenido como clase bytes archivos archivo java file-io rewrite

texto - printwriter java ejemplo



¿Es esta la mejor manera de reescribir el contenido de un archivo en Java? (7)

A menos que solo esté agregando contenido al final, es razonable hacerlo de esa manera. Si está anexando, intente con FileWriter con el constructor FileWriter .

Un orden un poco mejor sería:

  1. Genera un nuevo nombre de archivo (por ejemplo, foo.txt.new)
  2. Escribir contenido actualizado en un nuevo archivo.
  3. Hacer un cambio de nombre atómico de foo.txt.new a foo.txt

Desafortunadamente, renameTo no garantiza hacer un cambio de nombre atómico.

Quiero reescribir el contenido de un archivo.

Lo que he pensado hasta ahora es esto:

  1. Guarde el nombre del archivo
  2. Eliminar el archivo existente
  3. Crea un nuevo archivo vacío con el mismo nombre
  4. Escriba el contenido deseado en el archivo vacío

Es esta la mejor manera? ¿O hay una manera más directa, es decir, no tener que eliminar y crear archivos, sino simplemente cambiar el contenido?


En el siguiente ejemplo, el "falso" hace que el archivo se sobrescriba, verdadero podría causar lo contrario.

File file=new File("C:/Path/to/file.txt"); DataOutputStream outstream= new DataOutputStream(new FileOutputStream(file,false)); String body = "new content"; outstream.write(body.getBytes()); outstream.close();


Hay momentos en los que uno puede querer mantener un gran archivo vacío a fin de evitar el costo adicional de la asignación de espacio del sistema operativo según las necesidades. Esto generalmente se realiza mediante bases de datos, máquinas virtuales y también en programas por lotes que procesan y escriben datos masivos. Esto mejoraría significativamente el rendimiento de la aplicación. En estos casos, escribir un nuevo archivo y renombrarlo realmente no ayudaría. En cambio, el archivo vacío deberá llenarse. Es entonces cuando uno debe ir al modo de anulación.


Para sobrescribir el archivo foo.log con FileOutputStream:

File myFoo = new File("foo.log"); FileOutputStream fooStream = new FileOutputStream(myFoo, false); // true to append // false to overwrite. byte[] myBytes = "New Contents/n".getBytes(); fooStream.write(myBytes); fooStream.close();

o con FileWriter:

File myFoo = new File("foo.log"); FileWriter fooWriter = new FileWriter(myFoo, false); // true to append // false to overwrite. fooWriter.write("New Contents/n"); fooWriter.close();


Recomiendo usar FileUtil de Apache Common para esto. He encontrado este paquete invaluable. Es fácil de usar e igualmente importante es fácil de leer / entender cuando retrocedes un poco más tarde.

//Create some files here File sourceFile = new File("pathToYourFile"); File fileToCopy = new File("copyPath"); //Sample content org.apache.commons.io.FileUtils.writeStringToFile(sourceFile, "Sample content"); //Now copy from source to copy, the delete source. org.apache.commons.io.FileUtils.copyFile(sourceFile, fileToCopy); org.apache.commons.io.FileUtils.deleteQuietly(sourceFile);

Se puede encontrar más información en: http://commons.apache.org/io/api-release/org/apache/commons/io/FileUtils.html


Ver: java.io.RandomAccessFile

Querrá abrir un archivo de lectura y escritura, así que:

RandomAccessFile raf = new RandomAccessFile("filename.txt", "rw"); String tmp; while (tmp = raf.readLine() != null) { // Store String data } // do some string conversion raf.seek(0); raf.writeChars("newString");


Guava File.write "Sobrescribe un archivo con los contenidos de una matriz de bytes":

Files.write(bytes, new File(path));