cómo eliminar el contenido del archivo de texto sin borrarse a sí mismo

89

Quiero copiar el contenido del archivo 'A' al archivo 'B'. después de que se realiza la copia, quiero borrar el contenido del archivo 'A' y quiero escribir en él desde el principio. No puedo eliminar el archivo 'A' porque está relacionado con alguna otra tarea.

Pude copiar el contenido usando la API de archivos de Java (readLine ()), pero no sé cómo borrar el contenido del archivo y establecer el puntero del archivo al principio del archivo.

bergantín
fuente

Respuestas:

134

Simplemente imprima una cadena vacía en el archivo:

PrintWriter writer = new PrintWriter(file);
writer.print("");
writer.close();
Vlad
fuente
14
La escritura no es necesaria, y si otra tarea tiene el archivo abierto, es posible que la apertura ni siquiera sea posible.
Marqués de Lorne
escritor.close ??, estamos en 2017 !!!. Además, no es necesario imprimir (""), porque el texto se sobrescribirá
FSm
1
@Andro, ¿notas la marca de tiempo y las etiquetas? En aquel entonces, recuerdo que era la forma más confiable de vaciar un archivo en dispositivos Android.
Vlad
@Vlad Si no es necesario cerrar el escritor ahora, ¿tal vez sea una buena idea actualizar la respuesta?
Línea
70

No creo que tengas que escribir una cadena vacía en el archivo.

PrintWriter pw = new PrintWriter("filepath.txt");
pw.close();
camleng
fuente
9
Tienes razón en eso. Todas las respuestas que muestran una escritura son incorrectas o, en el mejor de los casos, redundantes.
Marqués de Lorne
33
¿Qué tal solo new PrintWriter("filepath.txt").close();?
Supuhstar
1
cita de java docs "Si el archivo existe, se truncará a tamaño cero"
Pinkerton
1
pero qué hacer si el archivo está en modo anexar.
GURMEET SINGH
Oh hombre, no puedo creer que me perdí la respuesta simple. Abrir archivo en modo truncado. Odio tanto el modo truncado que se me escapó.
30

Quiere el método setLength () en la clase RandomAccessFile.

Oso burleigh
fuente
5
De hecho, esta es la única respuesta correcta, ya que no elimina el archivo. Todas las demás respuestas lo hacen.
Marqués de Lorne
Necesito esto porque me gustaría borrar el archivo de registro creado por la biblioteca logback-android . Si elimino el archivo de registro manualmente, la biblioteca no es lo suficientemente inteligente como para crearlo nuevamente si hay un registro para escribir hasta que reinicie mi aplicación. Por lo tanto, utilicé este método y trabajé. No he estudiado mucho. ¿No es el mejor enfoque? Por favor aconséjame.
Yeung
Curiosamente, tengo un problema de producción porque la tarjeta Intenso clase 10 se congela (y fuerzo el reinicio de la batería) cuando llamo a fileOnSdCard.setLength (0) para una aplicación instalada desde el archivo .apk. Su tarjeta de clase 4 nunca mostró el problema.
Poutrathor
10

Un trazador de líneas para hacer la operación truncada:

FileChannel.open(Paths.get("/home/user/file/to/truncate"), StandardOpenOption.WRITE).truncate(0).close();

Más información disponible en Documentación de Java: https://docs.oracle.com/javase/7/docs/api/java/nio/channels/FileChannel.html

Michał
fuente
+1 Por no crear instancias de toda una clase de escritura de archivos (y peor aún, escribir en ella). Esta debería ser realmente la respuesta aceptada.
Kröw
6

¿Qué tal a continuación?

File temp = new File("<your file name>");
if (temp.exists()) {
    RandomAccessFile raf = new RandomAccessFile(temp, "rw");
    raf.setLength(0);
}
Sanjay Singh
fuente
5

Después de copiar de A a B, abra el archivo A nuevamente al modo de escritura y luego escriba una cadena vacía en él

Rasel
fuente
5

Uno de los mejores compañeros para Java es Apache Projects y por favor consúltelo. Para la operación relacionada con archivos, puede consultar el proyecto Commons IO .

El siguiente código de una línea nos ayudará a dejar el archivo vacío.

FileUtils.write(new File("/your/file/path"), "")
Anver Sadhat
fuente
4

Solo escribe:

FileOutputStream writer = new FileOutputStream("file.txt");
Manh Vu
fuente
2

Escriba una cadena vacía en el archivo, elimine y cierre. Asegúrese de que el escritor de archivos no esté en modo de adición. Creo que eso debería funcionar.

hakon
fuente
2

Si no necesita usar el escritor después, la forma más corta y limpia de hacerlo sería así:

new FileWriter("/path/to/your/file.txt").close();
Markus L.
fuente
1

usando: Nueva biblioteca NIO de Java 7, intente

        if(!Files.exists(filePath.getParent())) {
            Files.createDirectory(filePath.getParent());
        }
        if(!Files.exists(filePath)) {
            Files.createFile(filePath);
        }
        // Empty the file content
        writer = Files.newBufferedWriter(filePath);
        writer.write("");
        writer.flush();

El código anterior verifica si existe Directoty si no crea el directorio, verifica si el archivo existe es sí, escribe una cadena vacía y vacía el búfer, al final, el escritor apunta al archivo vacío

harsha
fuente
0

Puedes usar

FileWriter fw = new FileWriter(/*your file path*/);
PrintWriter pw = new PrintWriter(fw);
pw.write("");
pw.flush(); 
pw.close();

Recuerda no usar

FileWriter fw = new FileWriter(/*your file path*/,true);

True en el constructor del escritor de archivos habilitará append.

Revanth Kumar
fuente
0
FileOutputStream fos = openFileOutput("/*file name like --> one.txt*/", MODE_PRIVATE);
FileWriter fw = new FileWriter(fos.getFD());
fw.write("");
Harpreet Singh
fuente
¡Bienvenido a SO! Utilice las herramientas de formato integradas para facilitar la lectura del código.
Michael L.
0

Con try-with-resources, el escritor se cerrará automáticamente:

import org.apache.commons.lang3.StringUtils;
final File file = new File("SomeFile");
try (PrintWriter writer = new PrintWriter(file))  {
    writer.print(StringUtils.EMPTY);                
}
// here we can be sure that writer will be closed automatically
Bartek
fuente
0

Todo lo que tiene que hacer es abrir el archivo en modo truncado. Cualquier clase de archivo Java lo hará automáticamente por usted.


fuente
-2

puede escribir un método genérico como (es demasiado tarde, pero el código a continuación lo ayudará a usted / a otros)

public static FileInputStream getFile(File fileImport) throws IOException {
      FileInputStream fileStream = null;
    try {
        PrintWriter writer = new PrintWriter(fileImport);
        writer.print(StringUtils.EMPTY);
        fileStream = new FileInputStream(fileImport);
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            writer.close();
        }
         return fileStream;
}
Vishal
fuente
5
Esto no crea un archivo vacío, crea un archivo con un byte nulo en él.
Marqués de Lorne