Некоторое время я искал это в 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();



Я не знал этого класса трансформатора. Но я не вижу связи между вашими переменными Writer / File и вашими переменными xformer / source / result ... Похоже, вы пишете только новую строку. Если вы не пропустили какую-то важную часть.
Очевидный ответ - использовать StreamResult с Writer и добавить своего персонажа в Writer перед закрытием.
Кажется, вы пытаетесь повторно открыть файл, чтобы добавить символ. Две формы аргументов конструкторов FileOutputStream включают флаг добавления.
Использование Writer с библиотеками XML обычно приводит к проблемам, поскольку преобразователь не может обнаружить кодировку Writer, чтобы правильно установить атрибут кодировки, встроенный в XML. Вместо этого используйте OutputStream.
Здесь есть несколько вариантов.
Я предполагаю, что ваш результат - StreamResult, который вы создаете с String, указав путь к файлу назначения. Вы можете подумать об открытии FileOutputStream самостоятельно и соорудить с ним свой StreamResult. Затем, когда преобразователь будет готов, добавьте терминатор строки, промойте и закройте поток. В противном случае, если бы не было ограничений, я бы использовал этот подход.
Если вы хотите повторно открыть файл, как показано в вопросе, вам необходимо использовать конструктор FileOutputStream, который принимает необязательный аргумент append. Установите значение true, чтобы избежать искажения результата только что завершенного преобразования.
Вы также можете изучить установку выходного свойства indent в вашем преобразовании или включение необходимого терминатора строки непосредственно в ваш шаблон.
Просто ... просто добавьте параметр добавить:
new FileOutputStream(f, true /* append */);
одно примечание, убедитесь, что вы пишете свой символ новой строки, используя ту же кодировку символов, которую вы использовали для сериализации xml, иначе ваш файл будет поврежден.
Это будет класс Transformer в jaxp.