come aggiornare alcune parti del file di testo in java
-
28-09-2019 - |
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();
}
}
}
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