Browse Source

format io.

deason 5 years ago
parent
commit
3bd491ec46

+ 30 - 0
examcloud-core-questions-base/src/main/java/cn/com/qmth/examcloud/core/questions/base/IoUtils.java

@@ -0,0 +1,30 @@
+package cn.com.qmth.examcloud.core.questions.base;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+import java.io.IOException;
+
+public class IoUtils {
+    private static final Logger log = LoggerFactory.getLogger(IoUtils.class);
+
+    public static boolean createFile(File file) {
+        try {
+            return file.createNewFile();
+        } catch (IOException e) {
+            log.error(e.getMessage(), e);
+            return false;
+        }
+    }
+
+    public static boolean removeFile(File file) {
+        try {
+            return file.delete();
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            return false;
+        }
+    }
+
+}

+ 20 - 14
examcloud-core-questions-base/src/main/java/cn/com/qmth/examcloud/core/questions/base/converter/utils/FileUtil.java

@@ -253,17 +253,23 @@ public class FileUtil {
         if (path == null || content == null) {
             return;
         }
+
         if (encoding == null) {
             encoding = "UTF-8";
         }
+
         BufferedWriter bw = null;
         try {
             File file = new File(path);
             if (!file.exists()) {
                 if (FileUtil.makeDirs(file.getParent())) {
-                    file.createNewFile();
+                    boolean ok = file.createNewFile();
+                    if (!ok) {
+                        throw new RuntimeException("文件创建失败!");
+                    }
                 }
             }
+
             OutputStreamWriter write = new OutputStreamWriter(new FileOutputStream(file), encoding);
             bw = new BufferedWriter(write);
             bw.write(content);
@@ -355,20 +361,26 @@ public class FileUtil {
             log.error("待压缩的文件不能为空!");
             return false;
         }
-        ZipOutputStream zipOutStream = null;
-        OutputStream outStream = null;
-        try {
+
+        try (
+                OutputStream outStream = new FileOutputStream(zipFile);
+                ZipOutputStream zipOutStream = new ZipOutputStream(outStream, Charset.forName("UTF-8"));
+        ) {
             if (!zipFile.exists()) {
-                zipFile.createNewFile();
+                boolean ok = zipFile.createNewFile();
+                if (!ok) {
+                    log.error("压缩的文件创建失败!");
+                    return false;
+                }
             }
-            outStream = new FileOutputStream(zipFile);
-            zipOutStream = new ZipOutputStream(outStream, Charset.forName("UTF-8"));
+
             if (target.isDirectory()) {
                 File[] files = target.listFiles();
                 if (files.length == 0) {
                     log.error("文件夹内未找到任何文件!");
                     return false;
                 }
+
                 for (File file : files) {
                     doZip(zipOutStream, file, null);
                 }
@@ -377,14 +389,8 @@ public class FileUtil {
             }
         } catch (IOException e) {
             log.error(e.getMessage(), e);
-        } finally {
-            if (zipOutStream != null) {
-                IOUtils.closeQuietly(zipOutStream);
-            }
-            if (outStream != null) {
-                IOUtils.closeQuietly(outStream);
-            }
         }
+
         return true;
     }
 

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

@@ -1,6 +1,7 @@
 package cn.com.qmth.examcloud.core.questions.base.word;
 
 import cn.com.qmth.examcloud.core.questions.base.CommonUtils;
+import cn.com.qmth.examcloud.core.questions.base.IoUtils;
 import cn.com.qmth.examcloud.core.questions.base.ZipUtils;
 import cn.com.qmth.examcloud.core.questions.base.enums.QuesUnit;
 import freemarker.template.Template;
@@ -896,7 +897,7 @@ public final class DocxProcessUtil {
         for (String fileName : fileNames) {
             File file = new File(TEMP_FILE_EXP + fileName);
             if (file.exists()) {
-                file.delete();
+                IoUtils.removeFile(file);
             }
         }
         out.close();

+ 4 - 2
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/ClonePaperService.java

@@ -10,6 +10,7 @@ package cn.com.qmth.examcloud.core.questions.service;
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
 import cn.com.qmth.examcloud.core.questions.base.BeanCopierUtil;
 import cn.com.qmth.examcloud.core.questions.base.CommonUtils;
+import cn.com.qmth.examcloud.core.questions.base.IoUtils;
 import cn.com.qmth.examcloud.core.questions.base.Model;
 import cn.com.qmth.examcloud.core.questions.base.exception.PaperException;
 import cn.com.qmth.examcloud.core.questions.dao.*;
@@ -253,12 +254,13 @@ public class ClonePaperService {
                     } catch (Exception e) {
                         throw new PaperException("上传音频文件失败!");
                     } finally {
-                        audioFile.delete();
+                        IoUtils.removeFile(audioFile);
                     }
                 }
             }
         }
-        copyAudioDir.delete();
+
+        IoUtils.removeFile(copyAudioDir);
     }
 
     /**

+ 25 - 12
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/ImportPaperService.java

@@ -1,8 +1,10 @@
 package cn.com.qmth.examcloud.core.questions.service;
 
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
+import cn.com.qmth.examcloud.commons.exception.StatusException;
 import cn.com.qmth.examcloud.core.questions.base.BeanCopierUtil;
 import cn.com.qmth.examcloud.core.questions.base.CommonUtils;
+import cn.com.qmth.examcloud.core.questions.base.IoUtils;
 import cn.com.qmth.examcloud.core.questions.base.Model;
 import cn.com.qmth.examcloud.core.questions.base.enums.PaperStatus;
 import cn.com.qmth.examcloud.core.questions.base.enums.PaperType;
@@ -29,10 +31,7 @@ import org.springframework.data.domain.Example;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.commons.CommonsMultipartFile;
 
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
+import java.io.*;
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.regex.Pattern;
@@ -98,12 +97,25 @@ public class ImportPaperService {
      * @param file
      * @return
      */
-    public File getUploadFile(CommonsMultipartFile file) throws Exception {
-        String fileName = file.getOriginalFilename();
-        File tempFile = new File(DocxProcessUtil.TEMP_FILE_IMP + fileName);
-        OutputStream os = new FileOutputStream(tempFile);
-        IOUtils.copyLarge(file.getInputStream(), os);
-        IOUtils.closeQuietly(os);
+    public File getUploadFile(CommonsMultipartFile file) {
+        File tempFile = new File(DocxProcessUtil.TEMP_FILE_IMP + file.getOriginalFilename());
+
+        OutputStream os;
+        try {
+            os = new FileOutputStream(tempFile);
+        } catch (FileNotFoundException e) {
+            log.error(e.getMessage());
+            throw new StatusException("500", "文件操作失败!");
+        }
+
+        try (InputStream is = file.getInputStream();) {
+            IOUtils.copyLarge(is, os);
+        } catch (IOException e) {
+            log.error(e.getMessage());
+        } finally {
+            IOUtils.closeQuietly(os);
+        }
+
         return tempFile;
     }
 
@@ -1821,7 +1833,7 @@ public class ImportPaperService {
                     }
                     //重新上传新的音频文件
                     upyun.writeFile(upYunProperty.getRadioUploadPath() + newAudioFileName, audioFile, true);
-                    audioFile.delete();
+                    IoUtils.removeFile(audioFile);
 
                     //拷贝旧对象
                     QuestionAudio newAudio = new QuestionAudio(newQuestion.getId(), oldAudio.getFileName(), upYunProperty.getRadioUploadPath() + newAudioFileName);
@@ -1830,7 +1842,8 @@ public class ImportPaperService {
                     questionAudioService.saveQuestionAudio(newAudio, user);
                 }
                 //删除文件夹
-                copyAudioDir.delete();
+                IoUtils.removeFile(copyAudioDir);
+
                 //查询新音频
                 List<QuestionAudio> newQuestionAudios = questionAudioService.findQuestionAudiosByQuestionId(newQuestion.getId());
                 Map<String, String> newMap = new HashMap<>();

+ 5 - 2
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/converter/PrintExamPaperService.java

@@ -7,6 +7,7 @@
 
 package cn.com.qmth.examcloud.core.questions.service.converter;
 
+import cn.com.qmth.examcloud.core.questions.base.IoUtils;
 import cn.com.qmth.examcloud.core.questions.base.converter.model.Constants;
 import cn.com.qmth.examcloud.core.questions.base.converter.model.PolicyType;
 import cn.com.qmth.examcloud.core.questions.base.converter.model.QuesStructType;
@@ -219,8 +220,10 @@ public class PrintExamPaperService {
             FileUtil.appendHeader(paperZipFile, paperHeaders, null);
             FileUtil.appendHeader(answerZipFile, answerHeaders, null);
         }
-        paperZipFile.delete();
-        answerZipFile.delete();
+
+        IoUtils.removeFile(paperZipFile);
+        IoUtils.removeFile(answerZipFile);
+
         //FileUtils.deleteQuietly(paperDirFile);
         //FileUtils.deleteQuietly(answerDirFile);
     }

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

@@ -4,6 +4,7 @@ import cn.com.qmth.examcloud.api.commons.security.bean.User;
 import cn.com.qmth.examcloud.commons.exception.StatusException;
 import cn.com.qmth.examcloud.core.questions.base.CommonUtils;
 import cn.com.qmth.examcloud.core.questions.base.FileDisposeUtil;
+import cn.com.qmth.examcloud.core.questions.base.IoUtils;
 import cn.com.qmth.examcloud.core.questions.base.Model;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExamFileType;
 import cn.com.qmth.examcloud.core.questions.base.excel.ExcelWriter;
@@ -885,8 +886,9 @@ public abstract class ExportPaperAbstractService {
             ExamFile examFile = new ExamFile(computerTestPaper, extractConfig, zipUpyunFilePath, ExamFileType.COMPUTERTEST_PACKAGE, ZIP_SUFFIX);
             examFile.setGroupCode(examPaper.getGroupCode());
             examFileService.saveExamFile(examFile, accessUser);
+
             //删除本地生成的文件
-            zipFile.delete();
+            IoUtils.removeFile(zipFile);
             FileUtils.deleteQuietly(dirFile);
         }
     }
@@ -1006,7 +1008,8 @@ public abstract class ExportPaperAbstractService {
                     examFileType.getName() + "_" +
                     examFile.getGroupCode() + DOCX_SUFFIX);
             examFileService.saveExamFile(examFile, accessUser);
-            file.delete();
+
+            IoUtils.removeFile(file);
         } catch (Exception e) {
             log.error(e.getMessage(), e);
         }
@@ -1053,7 +1056,8 @@ public abstract class ExportPaperAbstractService {
             examFile.setGroupCode(examPaper.getGroupCode());
             examFile.setFileName(extractConfig.getCourseName() + "_" + extractConfig.getCourseCode() + "_" + ExamFileType.PAPER_STRUCTURE_OBJECTIVE + "_" + examPaper.getGroupCode() + EXCEL_SUFFIX);
             examFileService.saveExamFile(examFile, accessUser);
-            file.delete();
+
+            IoUtils.removeFile(file);
         } catch (FileNotFoundException e) {
             log.error(e.getMessage(), e);
         } catch (IOException e) {
@@ -1090,7 +1094,8 @@ public abstract class ExportPaperAbstractService {
             examFile.setGroupCode(examPaper.getGroupCode());
             examFile.setFileName(extractConfig.getCourseName() + "_" + extractConfig.getCourseCode() + "_" + ExamFileType.PAPER_STRUCTURE_SUBJECTIVE + "_" + examPaper.getGroupCode() + EXCEL_SUFFIX);
             examFileService.saveExamFile(examFile, accessUser);
-            file.delete();
+
+            IoUtils.removeFile(file);
         } catch (FileNotFoundException e) {
             log.error(e.getMessage(), e);
         } catch (IOException e) {

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

@@ -2,10 +2,7 @@ package cn.com.qmth.examcloud.core.questions.service.impl;
 
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
 import cn.com.qmth.examcloud.commons.exception.StatusException;
-import cn.com.qmth.examcloud.core.questions.base.CommonUtils;
-import cn.com.qmth.examcloud.core.questions.base.FileDisposeUtil;
-import cn.com.qmth.examcloud.core.questions.base.ImageUtils;
-import cn.com.qmth.examcloud.core.questions.base.SpringContextUtils;
+import cn.com.qmth.examcloud.core.questions.base.*;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExamFileType;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExportType;
 import cn.com.qmth.examcloud.core.questions.base.enums.ExportWay;
@@ -556,7 +553,7 @@ public class ExtractConfigFileServiceImpl implements ExtractConfigFileService {
         }
         File file = new File(downloadDir + File.separator + fileName);
         if (!file.exists()) {
-            file.createNewFile();
+            IoUtils.createFile(file);
         }
         return new FileOutputStream(file);
     }

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

@@ -9,10 +9,7 @@ import cn.com.qmth.examcloud.core.print.api.CoursePaperCloudService;
 import cn.com.qmth.examcloud.core.print.api.bean.SyncCoursePaperBean;
 import cn.com.qmth.examcloud.core.print.api.request.SyncCoursePaperReq;
 import cn.com.qmth.examcloud.core.print.api.response.SyncCoursePaperResp;
-import cn.com.qmth.examcloud.core.questions.base.BeanCopierUtil;
-import cn.com.qmth.examcloud.core.questions.base.CommonUtils;
-import cn.com.qmth.examcloud.core.questions.base.Model;
-import cn.com.qmth.examcloud.core.questions.base.SpringContextUtils;
+import cn.com.qmth.examcloud.core.questions.base.*;
 import cn.com.qmth.examcloud.core.questions.base.enums.PaperStatus;
 import cn.com.qmth.examcloud.core.questions.base.enums.PaperType;
 import cn.com.qmth.examcloud.core.questions.base.exception.PaperException;
@@ -1231,7 +1228,7 @@ public class PaperServiceImpl implements PaperService {
             //上传到又拍云
             UpYun upYun = new UpYun(upYunProperty.getBucketName(), upYunProperty.getUserName(), upYunProperty.getPassword());
             upYun.writeFile(upYunProperty.getRadioUploadPath() + mp3FileName, mp3File, true);
-            mp3File.delete();
+            IoUtils.removeFile(mp3File);
 
             //保存记录
             QuestionAudio audio = new QuestionAudio(questionId, file.getOriginalFilename(), upYunProperty.getRadioUploadPath() + mp3FileName);

+ 63 - 0
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/temp/DdCollegeUtilService.java

@@ -688,6 +688,69 @@ import cn.com.qmth.examcloud.core.questions.service.temp.vo.TestQuestionInfo;
  * @param str
  * @return
  * @throws UnsupportedEncodingException
+ * <p>
+ * 根据课程代码查询所有试卷
+ * @param codeName
+ * @return
+ * @throws UnsupportedEncodingException
+ * <p>
+ * 根据考试id查询所有试题
+ * @param testPaperContentId
+ * @return 根据父ID查询子题
+ * @param parentId
+ * @return 初始化试卷对象
+ * @param paper
+ * @param paperName
+ * @param user
+ * <p>
+ * 初始化大题对象
+ * @param testQuestion
+ * @return 初始化试题对象
+ * @param testQuestionInfo
+ * @param testQuestion
+ * @param course
+ * @param map
+ * @return
+ * @throws Exception
+ * <p>
+ * 初始化题干,答案,选项,资源
+ * @param question
+ * @param testQuestionInfo
+ * @param map
+ * @throws Exception
+ * <p>
+ * 初始化选项
+ * @param testOption
+ * @param number
+ * @param isCorrect
+ * @param wordMLPackage
+ * @return
+ * @throws Exception
+ * <p>
+ * 完形填空初始化所有子题
+ * @param blanks
+ * @param wordMLPackage
+ * @return
+ * @throws Exception
+ * <p>
+ * 初始化小题对象
+ * @param question
+ * @return 将大题和小题分类
+ * @param questions
+ * @return 去除图片中有下划线的图片,并补全图片下载地址
+ * @param str
+ * @return
+ * @throws Exception
+ * <p>
+ * 去除<span>标签中lang=EN-US
+ * @param str
+ * @return 替换img标签,补全图片
+ * @param imgList
+ * @param str
+ * @return 將url路徑中的中文转码
+ * @param str
+ * @return
+ * @throws UnsupportedEncodingException
  *//*
 @Service("ddCollegeUtilService")
 public class DdCollegeUtilService {