Pregunta

Quiero ser capaz de actualizar una determinada línea en un archivo de texto. Pero me sale el error que no puede eliminar el archivo, ¿por qué recibo este error?

public class Main {
    public static void main(String[] args) {
        Main rlf = new Main();
        rlf.removeLineFromFile("F:\\text.txt", "bbb");
    }

    public void removeLineFromFile(String file, String lineToRemove) {
        try {
            File inFile = new File(file);

            if (!inFile.isFile()) {
                System.out.println("Parameter is not an existing file");
                return;
            }

            //Construct the new file that will later be renamed to the original filename.
            File tempFile = new File(inFile.getAbsolutePath() + ".tmp");

            BufferedReader br = new BufferedReader(new FileReader(file));
            PrintWriter pw = new PrintWriter(new FileWriter(tempFile));

            String line = null;

            //Read from the original file and write to the new
            //unless content matches data to be removed.
            while ((line = br.readLine()) != null) {

                if (!line.trim().equals(lineToRemove)) {

                    pw.println(line);
                    pw.flush();
                }
            }
            pw.close();
            br.close();

            //Delete the original file
            if (!inFile.delete()) {
                System.out.println("Could not delete file");
                return;
            }

            //Rename the new file to the filename the original file had.
            if (!tempFile.renameTo(inFile)) System.out.println("Could not rename file");

        }
        catch (FileNotFoundException ex) {
            ex.printStackTrace();
        }
        catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}​
¿Fue útil?

Solución

El programa funciona para mí. Tal vez usted está teniendo un problema ambiental.

Otros consejos

Usted debe mirar en RandomAccessFile .

Esto le permitirá buscar el lugar en el archivo que desea, y sólo actualizar la parte que desea actualizar.

A medida que Justin se ha señalado anteriormente, se debe utilizar el tipo de RandomAccessFile API si desea modificar partes del archivo. El enfoque que está intentando utilizar tiene un montón de problemas potenciales.

  • Se requiere un archivo tmp que ser creado, además. Es posible que no escala para archivos de gran tamaño (no soy consciente de su dominio del problema, sin embargo)
  • Tratando de archivos malabares también puede causar varias excepciones posibles, y requiere una gran cantidad de tratamiento de errores.

Se puede crear una nueva instancia (para cerrar la edad) por new a continuación, eliminar el uso de la misma.
Mismo archivo problema de eliminación aquí

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top