Forráskód Böngészése

fix file streams close.

deason 5 éve
szülő
commit
6499510de9

+ 20 - 27
examcloud-core-questions-base/src/main/java/cn/com/qmth/examcloud/core/questions/base/word/DocxProcessUtil.java

@@ -660,40 +660,33 @@ public final class DocxProcessUtil {
 
     /**
      * 导出word
-     *
-     * @param dataModel
-     * @param fileName
-     * @param template
-     * @throws Exception File outFile = new File(TEMP_FILE_EXP+fileName);
      */
-    public static void exportWord(Object dataModel, String fileName, Template template) throws Exception {
-        Writer out = null;
+    public static void exportWord(Object dataModel, String fileName, Template template) {
         // 输出文件
         File outFile = new File(TEMP_FILE_EXP + fileName);
-        // 将模板和数据模型合并生成文件
-        out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), ENCODING));
-        // 生成文件
-        template.process(dataModel, out);
-        out.flush();
-        IOUtils.closeQuietly(out);
+
+        exportWordNew(dataModel, outFile, template);
     }
 
     /**
-     * 导出wordnew
-     *
-     * @param dataModel
-     * @param outFile
-     * @param template
-     * @throws Exception
+     * 导出Word
      */
-    public static void exportWordNew(Object dataModel, File outFile, Template template) throws Exception {
-        Writer out = null;
-        // 将模板和数据模型合并生成文件
-        out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), ENCODING));
-        // 生成文件
-        template.process(dataModel, out);
-        out.flush();
-        IOUtils.closeQuietly(out);
+    public static void exportWordNew(Object dataModel, File outFile, Template template) {
+        if (template == null) {
+            throw new RuntimeException("Export Word Template is null.");
+        }
+
+        try (FileOutputStream fos = new FileOutputStream(outFile);
+             OutputStreamWriter osw = new OutputStreamWriter(fos, ENCODING);
+             Writer out = new BufferedWriter(osw);
+        ) {
+            // 将模板和数据模型合并生成文件
+            template.process(dataModel, out);
+            out.flush();
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            throw new RuntimeException("Export Word Fail.");
+        }
     }
 
     public static boolean hasImage(String html) throws Exception {

+ 14 - 7
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/export/ExportPaperAbstractService.java

@@ -215,20 +215,27 @@ public abstract class ExportPaperAbstractService {
     protected static Template FDSF_TMPLATE_ANSWER;
 
     //原卷word A4 模板
-    public static Template ORIGINAL_PAPER = null;
+    public final static Template ORIGINAL_PAPER;
 
     private static Configuration CONFIGURATION;
 
     static {
+
         CONFIGURATION = new Configuration(Configuration.VERSION_2_3_25);
         // 设置编码
         CONFIGURATION.setDefaultEncoding(ENCODING);
         // 设置ftl模板路径
         CONFIGURATION.setClassForTemplateLoading(DocxProcessUtil.class, "/");
 
+        Template originalTemplate;
         try {
-            ORIGINAL_PAPER = CONFIGURATION.getTemplate("original_paper.ftl", ENCODING);
+            originalTemplate = CONFIGURATION.getTemplate("original_paper.ftl", ENCODING);
+        } catch (IOException e) {
+            originalTemplate = null;
+        }
+        ORIGINAL_PAPER = originalTemplate;
 
+        try {
             SXSF_TEMPLATE_PAPER = CONFIGURATION.getTemplate("sxsf_paper_template.ftl", ENCODING);
             SXSF_TEMPLATE_ANSWER = CONFIGURATION.getTemplate("sxsf_answer_template.ftl", ENCODING);
             SXSF_OUTLINE_TEMPLATE_PAPER = CONFIGURATION.getTemplate("sxsf_outline_paper_template.ftl", ENCODING);
@@ -987,12 +994,12 @@ public abstract class ExportPaperAbstractService {
      */
     protected void uploadPaperOrAnswerFile(PaperExp paperExp, ExtractConfig extractConfig, User accessUser, String currNum,
                                            Template template, ExamFileType examFileType, ExamPaper examPaper) {
-        String paperfileName = currNum + examFileType.name() + DOCX_SUFFIX;
+        String paperFileName = currNum + examFileType.name() + DOCX_SUFFIX;
         try {
-            DocxProcessUtil.exportWord(paperExp, paperfileName, template);
-            DocxProcessUtil.processImage(paperfileName, getPkgList(paperExp.getId()));
-            File file = new File(TEMP_FILE_EXP + paperfileName);
-            String paperFilePath = upYunProperty.getUploadPath() + extractConfig.getOrgId() + "/" + paperfileName;
+            DocxProcessUtil.exportWord(paperExp, paperFileName, template);
+            DocxProcessUtil.processImage(paperFileName, getPkgList(paperExp.getId()));
+            File file = new File(TEMP_FILE_EXP + paperFileName);
+            String paperFilePath = upYunProperty.getUploadPath() + extractConfig.getOrgId() + "/" + paperFileName;
             UpYun upyun = new UpYun(upYunProperty.getBucketName(), upYunProperty.getUserName(), upYunProperty.getPassword());
             upyun.writeFile(paperFilePath, file, true);
             ExamFile examFile = new ExamFile(paperExp.getId(), extractConfig, paperFilePath, examFileType, DOCX_SUFFIX);

+ 2 - 0
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/ExportPaperServiceImpl.java

@@ -793,7 +793,9 @@ public class ExportPaperServiceImpl implements ExportPaperService {
         String paperfileName = paperExp.getName() + "_" + paperExp.getCourseNo() + "_" + ExamFileType.PAPER.getName() + DOCX_SUFFIX;
         File file = new File(TEMP_FILE_EXP + File.separator + zipFileName + File.separator + paperfileName);
         List<WordprocessingMLPackage> wordPackages = getPkgList(paperId);
+
         DocxProcessUtil.exportWordNew(paperExp, file, ExportPaperAbstractService.ORIGINAL_PAPER);
+
         DocxProcessUtil.processImage(zipFileName + File.separator + paperfileName, wordPackages);
         FileDisposeUtil.fileToZip(TEMP_FILE_EXP + File.separator + zipFileName, TEMP_FILE_EXP, zipFileName);
         FileDisposeUtil.downloadFile(paperExp.getName() + "_" + paperExp.getCourse().getCode() + ".zip", TEMP_FILE_EXP + File.separator + zipFileName + ".zip", response);