Всем привет.
Вопрос связан с задачей level18.lesson10.bonus03.
Вопрос в следующем. Есть файл(filefileName) с несколькими строками определенной длины(каждая строка начинается с новой строчки), к примеру:
аааа ааааа ааааа bbbb bbbbb bbbbb cccc ccccc ccccc dddd ddddd dddddМне нужно заменить строку "bbbb bbbbb bbbbb" на новую строку(newStroka = "1111 11111 11111", длина у нее такая же как и у тех что в файле). Использую следующий код:
RandomAccessFile file = new RandomAccessFile(fileName, "rw");
// задаю длину, для args
StringBuilder idStr = new StringBuilder();
idStr.append(args[1]);
idStr.setLength(8);
String lineIdStr = idStr.toString().replace('\u0000', '\u0020');
String line = null;
//цикл по файлу. В line считывается 1 строка за проход
while ((line = file.readLine()) != null) {
System.out.println(line.length());
/* определяю какую строку нужно поменять. StartWith не лучший способ,
но код у меня сохранился именно с ним */
if (line.startsWith(lineIdStr)) {
/* Поидее эти строчки должны работать так: В pos, сохраняем позицию курсора
перед считаной строкой line. И мы перезаписываем требуюемую строку.
Но после этого следующая строка бьется и записывается не правильно"*/
long pos = file.getFilePointer() - line.length() - 2;
file.seek(pos);
file.write(newStroka.getBytes());
}
}
file.close();
В итоге после выполнения этого кода в файле будет следующее:
аааа ааааа ааааа 1111 11111 11111ссс ссссс dddd ddddd dddddВопрос почему так?
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Наверно потому что пропустил в конце строки разрыв"\n"? Ты считываешь строку, не учитывая знак разрыва строки. А когда записываешь, то должен его явно указать. Как его добавить, думаю должен знать?