在文件中的特定位置插入括号

Insert brackets at specific spots in file

我正在尝试编写一个脚本,给定一个文件,将搜索它并且每次遇到 require 调用时都会添加括号,例如,

var x = require("name")

变成

var x = require(["name"])

通常对于这样的事情我会考虑使用 Scanner,但由于我想在文件中编辑我正在考虑 FileChannel,因为从我读到的内容来看它可以操作文件。但是我不确定这是否是实现此目的的最有效方法;关于我应该如何处理的任何提示?

考虑使用 Apache Commons Io 库中的 FileUtils class。

 String pathToFile = "C:/SomeFile.txt"; 
 File myFile = new File(pathToFile);
 String fileContents = FileUtils.readFileToString(pathToFile, "utf-8"); 

然后您可以操作字符串,当您完成操作后,只需将其写入您的文件,覆盖原始内容。

 FileUtils.writeStringToFile(myFile, fileContents, "utf-8", false);

一般来说,由于文件系统的设置方式,实际上不可能写入文件中的特定位置。 RandomAccessFile 在某些情况下可以完成任务,但通常您需要像 Scanner 这样的输入流和像 PrintWriter 这样的输出流来逐行重写文件。大致可以这样实现:

Scanner in = new Scanner(new File("test.txt"));
PrintWriter out = new PrintWriter(new File("out.txt"));
String searchFor = "require(";

while(in.hasNextLine()){
   String tmp = in.nextLine();
   if(tmp.contains(searchFor)){
      String result;
      int index = tmp.indexOf(searchFor) + searchFor.length()+1;
      int endIndex = tmp.indexOf("\"",index);
      String first = tmp.substring(0, index);
      String word = tmp.substring(index, endIndex);
      result = first + "[" + word + "]\")";
      out.println(result);
   }
   else{
      out.println(tmp);
   }
}
out.flush();

这通过逐行查看并查看该行是否需要调整或是否可以保持不变来完成任务,并创建一个包含更改的新文件。

如果Scanner和PrintWriter中的参数相同,也可以覆盖文件。希望这对您有所帮助!