文件删除不起作用 - 它只在重启Jboss服务器并处于调试模式后工作一次

时间:2016-01-21 11:40:13

标签: java jsp java-ee jboss java-ee-web-profile

我正在使用JspServlet Pentahopublic Object process() throws RenderException, IOException { ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); // properties for XSSF File xmlFile = null; File templateFile = null; Writer xmlWriter = null; boolean isXLSX = false; timeStamp = Calendar.getInstance().getTimeInMillis(); try { OutputType outputType = rendererAttrList.getOutputType(); Frame[] frameList = xmlDef.getShownFrames(renderDocs); if (frameList != null) { // ==============================================TPID#65448 code // add======================================== boolean isPentahoExcel = false; Frame t_CurrFrame = frameList[0]; if (t_CurrFrame != null) { FrameType frameType = t_CurrFrame.getFrameType(); if (frameType == FrameType.FRAME_TYPE_EXTERNAL) { isPentahoExcel = true; } } // ==============================================TPID#65448 code end======================================== isXLSX = isXLSXOutput(frameList); // native excel support and if the output is not supported by // .xls, change the output to .xlsx if (((outputType == OutputType.NATIVE_EXCEL2007) || ((outputType == OutputType.NATIVE_EXCEL97) && isXLSX))&&!isPentahoExcel) { workbook = new XSSFWorkbook(); rendererAttrList.setOutputType(OutputType.NATIVE_EXCEL2007); xmlFile = File.createTempFile(getXmlDef().getName() + timeStamp, ".xml"); logger.info("XML File location :" + xmlFile.getAbsolutePath()); xmlWriter = new OutputStreamWriter(new FileOutputStream( xmlFile), "UTF-8"); spreadSheetWriter = new SpreadsheetWriter(xmlWriter); spreadSheetWriter.beginSheet(); } else { workbook = new HSSFWorkbook(); } dataFormat = workbook.createDataFormat(); sheet = workbook.createSheet("Report"); logger.debug("Start rendering the excel output in " + rendererAttrList.getOutputType() + " format "); renderOutput(); logger.debug("Stop rendering the excel output "); if (workbook instanceof HSSFWorkbook) { // ==============================================TPID#65448 code add======================================== if (isPentahoExcel) { renderExternalXLSX(t_CurrFrame,byteArrayOutputStream); } else { autoSizeColumn(); // write the excel to output workbook.write(byteArrayOutputStream); } // ==============================================TPID#65448 code end======================================== } else { // 1. generate data in XML format spreadSheetWriter.endSheet(); // close the xml stream before we substitute in xlsx file try { if (xmlWriter != null) xmlWriter.close(); xmlWriter = null; } catch (Exception ex) { logger.error("Error while closing xmlWriter for file " + xmlFile.getName()); } // Step 2. create template from the excel workbook String sheetRef = ((XSSFSheet) sheet).getPackagePart() .getPartName().getName(); templateFile = createTemplate(); ByteArrayOutputStream xlsxOutput = new ByteArrayOutputStream(); // Step 3. Substitute the template entry with the generated // data substitute(templateFile, xmlFile, sheetRef.substring(1), xlsxOutput); // if the data is too large don't try to auto size the // columns // may result into out of memory exception if (!isXLSX) { // autosize the columns InputStream inp = new ByteArrayInputStream( xlsxOutput.toByteArray()); workbook = WorkbookFactory.create(inp); sheet = workbook.getSheetAt(0); autoSizeColumn(); if (xlsxOutput != null) xlsxOutput.close(); byteArrayOutputStream = new ByteArrayOutputStream(); workbook.write(byteArrayOutputStream); inp.close(); xlsxOutput.close(); } else { byteArrayOutputStream = xlsxOutput; } } } } catch (Exception de) { logger.error(de.getMessage(), de); throw new RenderException(de.getMessage()); } finally { try { if (xmlWriter != null) xmlWriter.close(); if (xmlFile != null) xmlFile.delete(); if (templateFile != null){ templateFile.delete(); } } catch (Exception ex) { logger.error("Error while closing xmlWriter for file " + xmlFile.getName()); } } return byteArrayOutputStream; } (报告生成)开发系统。

此处在生成报告后,用户可以打开并将该文件保存为excel,并且工作正常。

但是当打开文件时会出现问题,它会在我们的jboss临时文件夹中创建文件,该文件未被删除 - 这就是问题。

我们正在从代码级别删除文件,并且我们发现在第一次删除后重新启动服务器之后,其他的东西在调试时每次都在删除。

Jboss

我的问题摘要templateFile.delete(); 第一次重启时以及调试时,临时创建的文件(临时目录)正在成功删除。

但是当它正常运行时它不会删除文件

但每次调用特定代码级别的问题都是它无法执行的原因。

{{1}}

非常感谢...

1 个答案:

答案 0 :(得分:0)

调用delete方法时会发生什么?您可以记录'删除'的输出。查看结果的方法。它应该是truefalse。 它会抛出异常吗? delete方法可能会抛出SecurityException,表示您被拒绝访问以删除该文件。

一般来说,首先要做的是尝试理解为什么文件没有被删除,因为这个特定功能提供给你的工具箱。

另一种方法可能是调用deleteIfExists方法。看这里: https://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#deleteIfExists-java.nio.file.Path-