Results 1 to 1 of 1
- 12-08-2011, 03:02 PM #1
Member
- Join Date
- Sep 2010
- Posts
- 16
- Rep Power
- 0
java program writing corrupt file
Hi,
My java program rarely(1 out of 1000 times) writes a corrupt xml file. corrupt xml file doesnt have tags from start but somewhere from mid. also first tag written in xml file doesnt have character.
and it happens very rarely. in successful cases, the same code writes correct xml.
following code is used to write xml. application is running on linux based Set top box and writing xml file on flash (STB doesnt have Hard disk). could writing on flash a reason of such problems?
Java Code:private void storeXML(Channel[] channels) { if (logger.isDebugEnabled()) { logger.debug("+ storeXML "); } File tempFile = new File(SUBSCRIBED_DTV_LINEUP_FILE_PATH_TEMP); File subscriberDTVXMLFile = new File(SUBSCRIBED_DTV_LINEUP_FILE_PATH); if(channels.length == 0) { if(subscriberDTVXMLFile.exists()) { if(subscriberDTVXMLFile.delete()) { if (logger.isDebugEnabled()) { logger.debug("Delete done"); } } else { if (logger.isLoggerEnabled()) { logger.warn("problem while deleting file."); } } } return; } StringBuffer buf = new StringBuffer(1000); XMLUtil.generateElementStart(buf, MessageTypes.CHANNEL_LIST); Channel channel; boolean dvbChannel; int[][] idTriplets; int[] currentRow; for (int i = 0; i channels.length; i++) { channel = channels; //todo TAG_DVBTCHANNEL if channel dvbt dvbChannel = channel.isType(DVBChannel.CHTYPE_DVB); if(dvbChannel) { XMLUtil.generateElementStart(buf, MessageTypes.TAG_DVBTCHANNEL); idTriplets = ((DVBChannel) channel).getIDTripletsArray(); for(int rowIdx = 0; rowIdx idTriplets.length; rowIdx++) { currentRow = idTriplets[rowIdx]; XMLUtil.generateElementStart(buf, MessageTypes.TAG_SERVICE); XMLUtil.generateElement(buf, MessageTypes.TAG_SERVICEID, currentRow[0]); // = serviceID; XMLUtil.generateElement(buf, MessageTypes.TAG_TRANSPORTID, currentRow[1]); // = transportID; XMLUtil.generateElement(buf, MessageTypes.TAG_ORIGNETWORKID, currentRow[2]); // = originalNetworkID; XMLUtil.generateElementEnd(buf, MessageTypes.TAG_SERVICE); } } else { XMLUtil.generateElementStart(buf, MessageTypes.TAG_CHANNEL); } XMLUtil.generateElement(buf, MessageTypes.TAG_CH_ID, channel.getChannelID()); XMLUtil.generateElement(buf, MessageTypes.TAG_CHANNEL_REFERENCE_NUMBER, channel.getChannelReferenceNumber()); XMLUtil.generateElement(buf, MessageTypes.TAG_CH_DISPLAYNUMBER, channel.getVisibleNumber()); XMLUtil.generateElement(buf, MessageTypes.TAG_CH_CALLLETTER, channel.getCallsign()); XMLUtil.generateElement(buf, MessageTypes.TAG_CH_TYPE, channel.getTypeStr()); XMLUtil.generateElement(buf, MessageTypes.TAG_CH_IP, channel.getIp()); XMLUtil.generateElement(buf, MessageTypes.TAG_CH_PORT, channel.getPort()); if(channel.getM_VideoTransport() != null) { XMLUtil.generateElement(buf, MessageTypes.TAG_CH_VIDEOTRANSPORT, channel.getM_VideoTransport()); } XMLUtil.generateElement(buf, MessageTypes.TAG_HD_RESOLUTION, channel.isHDContents() ? "HD" : "SD"); /*todo save below information for AVR subscriber ID = persistentdatamanager.getSubscriberID(), Viewer ID = ProfileManager.getViewerID() , STB Name=ProfileManager.getSTBName() */ if (channel.isFirstTunedChannel()) { XMLUtil.generateElement(buf, MessageTypes.TAG_CH_FIRST_TUNED_CHANNEL, true); } if(dvbChannel) { XMLUtil.generateElementEnd(buf, MessageTypes.TAG_DVBTCHANNEL); } else { XMLUtil.generateElementEnd(buf, MessageTypes.TAG_CHANNEL); } } XMLUtil.generateElementEnd(buf, MessageTypes.CHANNEL_LIST); OutputStreamWriter osw = null; Exception exception = null; try { osw = new OutputStreamWriter(new FileOutputStream(tempFile), "UTF-8"); try { osw.write(buf.toString()); } catch (IOException e) { exception = e; } } catch (FileNotFoundException e) { exception = e; } catch (UnsupportedEncodingException e) { exception = e; } finally { if (osw != null) { try { osw.close(); } catch (IOException e) { exception = e; } } } if(exception == null) { // every thing is fine, replace the file with orignal name. if(subscriberDTVXMLFile.exists()) { subscriberDTVXMLFile.delete(); } boolean renamed = tempFile.renameTo(subscriberDTVXMLFile); if(logger.isInfoEnabled()) { logger.info("File rename successfully? " + renamed); } } else { if (logger.isLoggerEnabled()) { logger.error("exception was occured:"); } exception.printStackTrace(); } if (logger.isDebugEnabled()) { logger.debug("- storeXML"); } }
it is urgent. please suggest a proper solution.
rashmi
Similar Threads
-
writing to a excel file from java program
By priyankabhar in forum New To JavaReplies: 15Last Post: 01-17-2014, 01:39 PM -
writing a program to read a specific amount of lines from a file?
By welikedogs in forum New To JavaReplies: 4Last Post: 11-03-2010, 07:17 PM -
Need help debugging this file parsing program I am writing
By The_Sponzy_Paradox in forum Advanced JavaReplies: 14Last Post: 07-07-2010, 01:49 PM -
Im writing to a file and i want to skip lines while writing to a text file.
By Broden_McDonald in forum New To JavaReplies: 1Last Post: 02-27-2010, 02:29 AM -
Data in JteaxtArea getting corrupt
By simmi in forum AWT / SwingReplies: 4Last Post: 08-25-2009, 10:34 AM
Bookmarks