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

时间:2015-06-26 00:17:44

标签: java java.util.scanner filechannel

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

var x = require("name")

变为

var x = require(["name"])

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

2 个答案:

答案 0 :(得分:1)

考虑使用Apache Commons Io Library中的FileUtils类。

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

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

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

答案 1 :(得分:1)

通常,由于文件系统的设置方式,它不可能写入文件中的特定位置。 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中的参数相同,它也可以覆盖该文件。希望这有帮助!