Search code examples
javatext-files

How to rename the temp file to original text file?


Hello my code basically delete the empty lines from txt file, but i want at the end temp file take the originals name.

    String inputFileName = "src/inware/users.txt";
    String outputFileName = "src/inware/usersT.txt";

    try (BufferedReader inputFile = new BufferedReader(new FileReader(inputFileName));
         PrintWriter outputFile = new PrintWriter(new FileWriter(outputFileName))) {
        String lineOfText;
        while ((lineOfText = inputFile.readLine()) != null) {
            lineOfText = lineOfText.trim();
            if (!lineOfText.isEmpty()) {
                outputFile.println(lineOfText);
            }
        }
        inputFile.close();
        outputFile.close();

        inputFile.delete();
        outputFile.renameTo(inputFile);

    } catch (IOException ex) {
        Logger.getLogger(ManageStudentController.class.getName()).log(Level.SEVERE, null, ex);
    }

I try

        inputFile.delete();
        outputFile.renameTo(inputFile);

But is not working... Any solution??


Solution

  • I found better solution that fix my problem:

        Path p = Paths.get("src", "inware", "users.txt");
        try {
            Path tempFile = Files.createTempFile(p.getParent(), "usersTemp", ".txt");
            try (BufferedReader in = Files.newBufferedReader(p);
                 PrintWriter out = new PrintWriter(Files.newBufferedWriter(tempFile))) {
                for (String line; (line = in.readLine()) != null;) {
                    line = line.trim();
                    if (!line.isEmpty()) {
                        out.println(line);
                    }
                }
            }
            Files.copy(tempFile, p, StandardCopyOption.REPLACE_EXISTING);
            Files.delete(tempFile);
    
        } catch (IOException ex) {
            Logger.getLogger(ManageStudentController.class.getName()).log(Level.SEVERE, null, ex);
        }