Domanda

Voglio essere in grado di aggiornare una certa linea su un file di testo. Ma ho l'errore che non è possibile eliminare il file, perché ottengo questo errore?

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();
        }
    }
}​
È stato utile?

Soluzione

Il programma funziona per me. Forse si stanno avendo un problema ambientale.

Altri suggerimenti

Si dovrebbe guardare in RandomAccessFile .

Questo vi permetterà di cercare il posto nel file che si desidera, e aggiornare solo la parte che si desidera aggiornare.

Come Justin ha sottolineato in precedenza, si dovrebbe utilizzare il tipo RandomAccessFile di api, se si desidera modificare le parti del file. L'approccio che si sta tentando di utilizzare ha un sacco di potenziali problemi.

  • Si richiede un file tmp da creare in aggiunta. Non può Scala per file di grandi dimensioni (non sono a conoscenza del tuo dominio del problema, però)
  • Cercando di file Juggle anche può causare diversi potenziali eccezioni, e richiede un sacco di gestione degli errori.

È possibile creare una nuova istanza (per chiudere il vecchio) di new quindi eliminarlo utilizzarlo.
Stesso file problema di eliminazione qui

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top