Java добавить в файл - PullRequest
       19

Java добавить в файл

3 голосов
/ 16 декабря 2008

Я гуглил это некоторое время, но не могу найти это, и это должно быть легко. Я хочу добавить CR в конец XML-файла, который я создаю с помощью Transformer. Есть ли способ сделать это>

Я попробовал следующее, но это привело к пустому файлу?


Transformer xformer = TransformerFactory.newInstance().newTransformer();
xformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, "file:///ReportWiz.dtd");
xformer.transform(source, result);
OutputStream writer = new FileOutputStream(file);
Byte b = '\n';
writer.write(b);
writer.close();

Ответы [ 5 ]

10 голосов
/ 16 декабря 2008

Простой ... просто добавьте параметр append :

    new FileOutputStream(f, true /* append */);
5 голосов
/ 16 декабря 2008

Здесь есть несколько вариантов.

Я предполагаю, что ваш результат - StreamResult, который вы создаете с String, указывающим путь к файлу назначения. Вы могли бы подумать об открытии FileOutputStream самостоятельно и создать свой StreamResult с этим. Затем, когда преобразователь будет готов, добавьте терминатор строки, очистите и закройте поток. В противном случае я бы использовал этот подход.

Если вы хотите заново открыть файл, как показано в вопросе, вам нужно использовать конструктор FileOutputStream, который принимает необязательный аргумент append. Задайте для этого параметра значение true, чтобы избежать искажения результата только что завершенного преобразования.

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

1 голос
/ 16 декабря 2008

Очевидным ответом является использование StreamResult с Writer и добавление вашего персонажа в Writer перед закрытием.

Вы пытаетесь открыть файл, чтобы добавить символ. Две формы аргумента конструкторов FileOutputStream включают флаг добавления.

0 голосов
/ 16 декабря 2008

одна заметка, убедитесь, что вы пишете символ новой строки, используя ту же кодировку, которую вы использовали для сериализации xml, иначе ваш файл будет поврежден.

0 голосов
/ 16 декабря 2008

Я не знал этот класс Трансформер. Но я не вижу связи между вашими переменными write / file и вашими переменными xformer / source / result ... Похоже, вы пишете только новую строку.
Если вы не пропустили какую-то важную часть.

...