2015-06-26 3 views
3

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

var x = require("name") 

становится

var x = require(["name"]) 

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

+0

Эй, интересно, если бы вы смогли решить свою проблему с помощью любого из ответов или чего-то, что вы выяснили самостоятельно. Если вы это сделали, вы можете принять ответ, который вам помог, или вы можете добавить свой собственный ответ, чтобы люди могли легче найти ответы на проблемы, подобные вашим. – Tresdon

ответ

1

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

+1

Спасибо за помощь. Я адаптировал части вашего кода и добился прогресса, но контрольно-пропускной блок, с которым я столкнулся, заключается в том, что код, который есть в настоящее время, требует («[x]»), а не требования (["Икс"]). Играю с индексацией. – lightfighter

+0

Я полностью извинился за непонимание того, как этот результат будет давать результаты иначе, чем ожидалось. Я думаю, что вы можете искать, чтобы исправить это: 'Струнный первый = tmp.substring (0, индекс - 1);' , чтобы избавиться от этой первой котировки, а затем: результат '= сначала + "[\" "+ word +" \ "])"; ' положить все в нужное место. Надеюсь, что так работает! – Tresdon

1

Рассмотрите возможность использования класса 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);