Вставьте скобки в определенные места в файле

Я пытаюсь написать скрипт, который, учитывая файл, будет искать по нему, и каждый раз, когда он встречает вызов require, будет добавлять скобки, так что, например,

var x = require("name")

становится

var x = require(["name"])

Обычно для чего-то подобного я бы хотел использовать Scanner, но, поскольку я хочу редактировать файл, я рассматриваю FileChannel, поскольку из того, что я прочитал, он может манипулировать файлами. Однако я не уверен, является ли это наиболее эффективным методом достижения этой цели; Любые советы о том, как я должен идти по этому поводу?

2 ответа

Решение

В общем случае запись файла в определенное место в файле невозможна из-за того, как настроены файловые системы. 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 совпадают. Надеюсь это поможет!

Рассмотрите возможность использования класса FileUtils из библиотеки Apache Commons Io.

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

Затем вы можете манипулировать строкой, и когда вы закончите манипулировать ею, просто запишите ее в свой файл, переписав исходный контент.

 FileUtils.writeStringToFile(myFile, fileContents, "utf-8", false);
Другие вопросы по тегам