У меня есть программа Java, которая использует PrintWriter для записи текста в файл, используя множество операторов .println (), все работает нормально. Я хочу знать: есть ли способ записать в определенную строку в выходном файле?

например Если моя программа записывает 10 строк в выходной файл, используя 10 операторов .println (). Есть ли способ, чтобы в конце моей программы я мог сказать ему, чтобы он записал строку в 3-ю строку текста в файле, и тогда оставшиеся 7 строк сдвинулись бы на одну строку, чтобы освободить место для новой 3-й строки ?

Любая помощь будет принята с благодарностью, заранее спасибо, Стивен.

3
Stephen Walsh 9 Май 2014 в 15:56

3 ответа

Лучший ответ

Вы можете сделать это, но вы должны сделать это.

Самое простое решение - переписать файл с нужной вам дополнительной строкой.

Или, используя RandomAccessFile, вы можете найти третью строку, скопировать все данные в файле вниз и вставить строку, которую вы хотите добавить.

2
Peter Lawrey 9 Май 2014 в 11:58

Нет, PrintWriter может только перезаписывать файл или добавлять его в конец.

Если вы «перезаписываете» строку, длина новой строки может отличаться от исходной, поэтому все содержимое, следующее за строкой, придется сдвинуть, чего PrintWriter сделать не может.

2
icza 9 Май 2014 в 11:57

Не только PrintWriter не может этого сделать. Все остальные Writers и OutputStreams тоже не могут этого сделать. Даже каналы произвольного доступа не могут этого сделать (сами по себе).

Это потому, что «линия» не имеет определенной длины. Кроме того, если вы хотите что-то вставить, вам придется переместить все, что идет после этого.

Что вы можете сделать, так это переместить поток и перезаписать то, что там есть.

1
Ingo 9 Май 2014 в 12:01