Вставьте скобки в определенные места в файле
Я пытаюсь написать скрипт, который, учитывая файл, будет искать по нему, и каждый раз, когда он встречает вызов 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);