content of XML file created by java app dissapears if computer is shut down -
content of XML file created by java app dissapears if computer is shut down -
i developed desktop application, has class reads xml file (using dom), performs operations data, , saves info xml (replacing previous file). class instantiated , method invoked every 30 seconds. problem have if computer running application shutdown (suddenly powerfulness button, not properly). then, when pc starts again, xml file empty. blank file remains. doesn't happen every single time computer shut down, though. if computer turned off, never happens. code:
private org.w3c.dom.document dom; private javax.xml.parsers.documentbuilder db; public playerconfighandler() { documentbuilderfactory dbf = documentbuilderfactory.newinstance(); seek { db = dbf.newdocumentbuilder(); dom = db.newdocument(); } grab (exception e) { } } public void updateconfig(list<file> playlists) { string playerpath = preferences.getinstance().readstringproperty("playerdirectory"); file configuration = new file(playerpath + "\\playerconfiguration.sdpp"); // replace configuration path if(!configuration.exists()) { logger.getlogger(playerconfighandler.class).info("file " + configuration + " not exist! unable update it."); return; } dom = db.newdocument(); inputstream = null; reader reader = null; seek { = new fileinputstream(configuration); reader = new inputstreamreader(is); inputsource source = new inputsource(reader); dom = db.parse(source); } grab (saxexception ex) { logger.getlogger(playerconfighandler.class).error("updateconfig(). saxexception reading xml file: " + ex); return; } grab (ioexception ex) { logger.getlogger(playerconfighandler.class).error("updateconfig(). ioexception reading xml file: " + ex); return; } catch(exception ex) { logger.getlogger(playerconfighandler.class).error("updateconfig(). exception reading xml file: " + ex); return; } { seek { reader.close(); is.close(); } grab (exception e) { logger.getlogger(playerconfighandler.class).error("exception closing fileinputstream/reader after reading xml file: " + e); } } element element = dom.getdocumentelement(); //perform operations info read... fileoutputstream outputstream = null; seek { transformerfactory transformerfactory = transformerfactory.newinstance(); transformerfactory.setattribute("indent-number", 4); transformer transformer = transformerfactory.newtransformer(); transformer.setoutputproperty("encoding","iso-8859-1"); source source = new domsource(dom); outputstream = new fileoutputstream(configuration); result result = new streamresult(new outputstreamwriter(outputstream)); transformer.setoutputproperty(outputkeys.method, "xml"); transformer.setoutputproperty(outputkeys.indent, "yes"); transformer.transform(source, result); } grab (transformerconfigurationexception tce) { logger.getlogger(playerconfighandler.class).error("exception saving xml file: " + tce); } grab (transformerexception te) { logger.getlogger(playerconfighandler.class).error("exception saving xml file: " + te); } grab (filenotfoundexception fe) { logger.getlogger(playerconfighandler.class).error("exception saving xml file: " + fe); } catch(exception e) { logger.getlogger(playerconfighandler.class).error("exception saving xml file: " + e); } { seek { outputstream.close(); } grab (exception e) { logger.getlogger(playerconfighandler.class).error("exception closing fileoutputstream after writing xml file: " + e); } } dom = db.newdocument(); }
any thought of why happens? there wrong in code? there way prevent this? thanks, damian
to prevent such thing, open file , read it, perform operations, save in file, , them replace first file sec (like rename
).
this way, when turn computer off, you'll have old file.
but not super-secure: there might happen turn computer off in moment it's replacing file, leaving corrupted file instead.
java xml dom
Comments
Post a Comment