Я не понимаю, почему вы используете объект RandomAccessFile
, когда используете текстовый файл.Как говорит Питер Лоури, я бы предложил вам использовать объект BufferedReader
для чтения файла и вместо PrintWriter
.
РЕДАКТИРОВАТЬ: я проверил ваш код на моей машине, и он хорошо работает для меня,но с этим редактированием (lineData.length()-2
должно быть lineData.length()-1)
:
while((lineData =raf.readLine()) != null){
pointer = raf.getFilePointer() - lineData.length()-1;
if(lineData.indexOf(match) > 0){
lineData = lineData.replace(match, replacingString+"\n");
raf.seek(pointer);
raf.writeBytes(lineData);
}
}
Однако попробуйте этот код, он делает то же самое, но с объектами BufferedReader
и PrintWriter
, создавая новый файл с именемthe_new_file_with_replacing.txt
:
public static void replaceStringInFile(String fileName, String match, String replacingString){
try {
FileReader file = new FileReader(fileName);
BufferedReader br = new BufferedReader(file);
PrintWriter pw = new PrintWriter(new FileWriter("the_new_file_with_replacing.txt"));
String lineData = "";
while((lineData = br.readLine()) != null){
pw.println(lineData.replaceAll(match,replacingString));
}
file.close();
br.close();
pw.close();
}
catch(Exception e){
System.out.println("exception");
}
}