es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Ambos métodos renameTo() y File.move() no están cambiando el nombre del archivo.

Estoy intentando renombrar el archivo de texto “tempa.txt” a “VaccineSupply.txt” usando renameTo() al principio, pero falló, hice una investigación superficial y adopté el método File.move(), también ha fallado en renombrar el archivo. A continuación, se muestra el código que estoy intentando implementar, es un método utilizado para eliminar una fila en un archivo de texto.

El archivo “tempa.txt” siempre está ahí y no se ha cambiado el nombre a “VaccineSupply.txt”, el antiguo archivo “VaccineSupply.txt” no se elimina. A veces funciona, pero eso es una ocasión muy rara, por favor ayúdeme, gracias.

Estoy usando Windows 10.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    A partir del código proporcionado, parece que el problema podría estar relacionado con el bloqueo de archivos. Está utilizando FileReader y BufferedReader para leer el archivo mientras aún lo tiene abierto. Esto podría causar problemas al intentar cambiar el nombre o eliminar el archivo.

    Un enfoque mejor sería usar la declaración try-with-resources para manejar los recursos y asegurarse de que se cierren correctamente. La siguiente es una versión actualizada del método que aborda este problema:

    public boolean DelVacSupply(int Target) throws IOException {
        boolean success = false;
        Path filePath = Paths.get("VaccineSupply.txt");
        Path tempFilePath = Paths.get("Tempa.txt");
        String abc = Integer.toString(Target);
    
        try (BufferedReader reader = Files.newBufferedReader(filePath);
             PrintWriter writer = new PrintWriter(Files.newBufferedWriter(tempFilePath))) {
    
            String line = reader.readLine();
            while (line != null) {
                String[] wordsinLine = line.split(",");
                if (wordsinLine[0].equals(abc)) {
                    success = true;
                } else {
                    writer.println(line);
                }
    
                line = reader.readLine();
            }
    
        } catch (IOException e) {
            e.printStackTrace();
        }
    
        if (success) {
            Files.delete(filePath);
            Files.move(tempFilePath, filePath);
        } else {
            Files.delete(tempFilePath);
        }
    
        return success;
    }
    

    En esta versión actualizada, estamos utilizando la API de Java NIO en lugar de la API Java IO heredada. Esto nos permite usar la declaración try-with-resources para manejar los recursos y asegurarnos de que se cierren correctamente incluso en caso de excepciones.

    También estamos usando objetos Path en lugar de objetos File, que es la forma recomendada de trabajar con las rutas de archivos en Java. Usamos Files.newBufferedReader y Files.newBufferedWriter para crear lectores y escritores bufferizados respectivamente.

    Finalmente, eliminamos el archivo original solo si la modificación fue exitosa y luego movemos el archivo temporal a la ruta del archivo original.

    Tenga en cuenta que este código asume que las rutas de archivo son correctas y que el archivo existe. Es posible que desee agregar alguna verificación de errores en caso de que el archivo no exista o no se pueda leer.

Comments are closed.