Modifica del contenuto del file esistente in Java

Voglio sostituire il contenuto del file di seconda riga, qualcuno può aiutare per favore in base al formato di file sottostante e al metodo di ascolto.

1324254875443 1313131 Paid 0.0 

La seconda riga è lunga e vuole essere sostituita con currentTimeMillis() .

 /************** Pay Button Listener **************/ public class payListener implements ActionListener { public void actionPerformsd(ActionEvent e) { ArrayList lines = new ArrayList(); String line = null; try { FileReader fr = new FileReader("Ticket/" + ticketIDNumber + ".dat"); BufferedReader br = new BufferedReader(fr); FileWriter fw = new FileWriter("Ticket/" + ticketIDNumber + ".dat"); BufferedWriter bw = new BufferedWriter(fw); while ((line = br.readLine()) != null) { if (line.contains("1313131")) line.replace(System.currentTimeMillis(); lines.add(line); bw.write(line); } //end if } //end try catch (Exception e) { } //end catch } //end while }//end method 

Come proposto nella risposta accettata a una domanda simile :

aprire contemporaneamente un file temporaneo in modalità scrittura e, per ogni riga, leggerlo, modificarlo se necessario, quindi scrivere nel file temporaneo. Al termine, eliminare l’originale e rinominare il file temporaneo.

In base alla tua implementazione, qualcosa di simile a:

 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class ReplaceFileContents { public static void main(String[] args) { new ReplaceFileContents().replace(); } public void replace() { String oldFileName = "try.dat"; String tmpFileName = "tmp_try.dat"; BufferedReader br = null; BufferedWriter bw = null; try { br = new BufferedReader(new FileReader(oldFileName)); bw = new BufferedWriter(new FileWriter(tmpFileName)); String line; while ((line = br.readLine()) != null) { if (line.contains("1313131")) line = line.replace("1313131", ""+System.currentTimeMillis()); bw.write(line+"\n"); } } catch (Exception e) { return; } finally { try { if(br != null) br.close(); } catch (IOException e) { // } try { if(bw != null) bw.close(); } catch (IOException e) { // } } // Once everything is complete, delete old file.. File oldFile = new File(oldFileName); oldFile.delete(); // And rename tmp file's name to old file name File newFile = new File(tmpFileName); newFile.renameTo(oldFile); } } 

Anche se questa domanda è molto vecchia vorrei aggiungere che questo può essere ottenuto molto più facilmente da quando Java 1.7 con java.nio.file.Files :

 List newLines = new ArrayList<>(); for (String line : Files.readAllLines(Paths.get(fileName), StandardCharsets.UTF_8)) { if (line.contains("1313131")) { newLines.add(line.replace("1313131", ""+System.currentTimeMillis())); } else { newLines.add(line); } } Files.write(Paths.get(fileName), newLines, StandardCharsets.UTF_8); 

Potrei suggerire di usare la libreria IO di Apache Commons . Lì troverai la class org.apache.commons.io.FileUtils . Puoi usarlo:

 File file = new File("... your file..."); List lines = FileUtils.readLines(file); lines.set(1, ""+System.currentTimeMillis()); FileUtils.writeLines(file, lines); 

Questo codice legge l’intero contenuto del file in un List of String e modifica il contenuto della seconda riga, quindi scrive nuovamente l’elenco nel file.

Non sono sicuro che leggere e scrivere lo stesso file contemporaneamente sia una buona idea. Penso che sarebbe meglio leggere il file riga per riga in un array di String , sostituire la seconda riga e quindi scrivere di nuovo l’array di String nel file.