用Java修改现有文件内容

我想替换第二行文件内容,有人可以根据下面的文件格式和监听方法请求帮助。

1324254875443 1313131 Paid 0.0 

第二行很长,想要替换为currentTimeMillis()

 /************** Pay Button Listener **************/ public class payListener implements ActionListener { public void actionPerformed(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 

正如在类似问题 的公认答案中提出的那样 :

同时以写入模式打开临时文件,并为每行读取,必要时进行修改,然后写入临时文件。 最后,删除原始文件并重命名临时文件。

根据您的实现,类似于:

 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); } } 

虽然这个问题很老,但我想补充说,自Java 1.7以及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); 

我可以建议使用Apache Commons IO库。 在那里你会找到类org.apache.commons.io.FileUtils 。 你可以用它:

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

此代码将整个文件内容读入List of String并更改第二行的内容,然后将列表写回文件。

我不确定同时阅读和编写同一个文件是个好主意。 我认为将文件逐行读入String数组,替换第二行然后将String数组写回文件会更好。