2013-02-12 3 views
2

Я создаю текстовый файл с помощью BufferedWriterЗаменить символ в BufferedWriter

BufferedWriter bufferedWriter = 
      new BufferedWriter(new FileWriter("/home/user/temp.txt")); 

/* 

    Add Contents using bufferedWriter.write() 

*/ 

в определенных местах, добавляя содержимое добавить строку, последовательность ######

Перед тем, как сделать bufferedWriter.close() Я хочу заменить последовательность ###### с определенным значением.

Как я могу это сделать?

Я не хочу повторно открывать Writer, но мог бы использовать другой сценарий, если он позволяет это сделать.

+0

Почему вы пишете его, если собираетесь его заменить? Это как шаблон? –

+0

См. ['RandomAccessFile'] (http://docs.oracle.com/javase/7/docs/api/java/io/RandomAccessFile.html). –

+0

@SotiriosDelimanolis Значение, которое должно быть заменено, известно только после определенных вычислений и только после его ввода. –

ответ

2

Создайте содержимое как String или List<String>.

После того, как вы заменили #####, вы записываете String или List<String> на номер BufferedWriter.

1

Я считаю, что у вас есть следующие варианты:

  • Написать свой Writer. Ни один из Writers, о котором я знаю, может сделать это просто потому, что на самом деле напишите на диск (в файл), когда вы вызываете .write() на них. Некоторые, например BufferedWriter, не делайте этого немедленно, но если вы превысите внутренний буфер, он все равно будет покрашен в файл - даже без вашего вызова flush() или close().

  • Просто используйте StringBuilder. Напишите в StringBuilder, затем замените свою последовательность и только затем напишите в файл.

  • Написать новый файл каждый раз, когда вы сталкиваетесь ######. Фактически, у вас будет несколько файлов с отсутствующим фрагментом текста между ними. После того, как вы знаете правильную последовательность, которая должна заменить ######, присоединитесь к файлам, используя эту последовательность.

  • Если у вас достаточно памяти для хранения всех данных в памяти, используйте List<String> (разделение на ######, а затем присоединиться элементы, используя что-то вроде Joiner).

-1

Как насчет чего-то подобного?

BufferedReader br = new BufferedReader(new FileReader("/home/user/temp.txt")); 
BufferedWriter bw = new BufferedWriter(new FileWriter("/home/user/temp.txt")) 
String line 
StringBuffer sb = new StringBuffer() 
while (line = br.readLine()) { 
    line = line.replace("######", "yourReplacement") 
    sb.append(line) 
} 
br.close() 
bw.write(sb.toString(), 0, sb.length()) 
bw.close() 
Смежные вопросы