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

Некоторое время я искал это в Google, но, похоже, не нашел, и это должно быть легко. Я хочу добавить 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();
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
0
4 038
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

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

Это будет класс Transformer в jaxp.

Tom Hawtin - tackline 16.12.2008 00:40

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

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

Использование Writer с библиотеками XML обычно приводит к проблемам, поскольку преобразователь не может обнаружить кодировку Writer, чтобы правильно установить атрибут кодировки, встроенный в XML. Вместо этого используйте OutputStream.

erickson 16.12.2008 00:44

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

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

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

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

Ответ принят как подходящий

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

    new FileOutputStream(f, true /* append */);

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

Другие вопросы по теме