我有一个包含一些内容的XML文件。我想在REST请求上修改此文件。在创建新的FileOutputStream时,所有内容都将被删除,以后再用我的代码将所需的数据添加到XML文件中。 但是在创建新的FileOutputStream后,如果抛出EXCEPTION,则所有内容都将被擦除。
如果引发异常,如何按原样保留XML文件(Abc.xml)中的原始内容?
FileOutputStream fileOutputStream = null;
try {
validateXMLSchema("Abc.xsd", "Abc.xml");
JAXBContext jc = JAXBContext.newInstance(Structure.class);
Marshaller marshaller = jc.createMarshaller();
fileOutputStream = new FileOutputStream(
new File(System.getProperty("rootPath") + "/WEB-INF/classes"
+ "/" + "Abc.xml"));
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
Structure structure = new Structure();
structure.setName("Types");
ObjectFactory objectFactory = new ObjectFactory();
} catch (JAXBException e) {
throw IlmODataExceptionBuilder.buildODataApplicationException(
FILE_FORMAT_IS_INCORRECT_CREATE_FILE_AGAIN,
HttpStatusCode.BAD_REQUEST, "Abc.xml");
} catch (FileNotFoundException e) {
throw IlmODataExceptionBuilder.buildODataApplicationException(
FILE_NOT_FOUND, HttpStatusCode.BAD_REQUEST,
"Abc.xml");
} finally {
if (fileOutputStream != null) {
fileOutputStream.close();
}
}
此处方法validateXMLSchema()仅验证XML模式。 任何帮助表示赞赏。
答案 0 :(得分:1)
处理类似问题的一种好方法是依靠通常原子化的文件重命名操作。
答案 1 :(得分:0)
在完成可能会因Exception失败的工作之前,请不要创建任何FileOutputStream或类似的文件。
创建FileOutputStream通过创建文件来准备文件系统以接收文件的字节。如果已经存在,它将删除现有文件,而不仅仅是创建它。
因此,在准备删除文件之前不要这样做。