Java poi導入word文件提取內容

一、需求描述

java web項目從前臺上傳word格式文件,後臺接收文件並提取word內容保存至數據庫。

二、依賴jar包

這裏操作的是maven項目,所有依賴jar包均可到maven倉庫進行免費下載。具體如下:

三、後臺代碼

這裏的java_web項目採用SpringMVC的內置文件上傳方式進行接收解析,具體如下:

    /**
     * 提取word文件內容
     * @param file
     * @param request
     * @return
     * @throws IOException 
     * @throws IllegalStateException 
     */
    @RequestMapping(value = "/getPapers", method = RequestMethod.POST, produces = { "text/html;charset=utf-8" })
    @ResponseBody
    private Object getPapers(@RequestParam("file") MultipartFile multfile,HttpServletRequest request) throws IllegalStateException, IOException {
        // 獲取文件名
        String fileName = multfile.getOriginalFilename();
        //判斷是否爲word類型文件
        if (!fileName.endsWith(".doc") && !fileName.endsWith(".docx")) {
            System.out.println("此文件不是word文件!");
        }
        //當前系統的臨時文件地址
        String realPath = request.getSession().getServletContext().getRealPath("/static/app/appkmbgszh/uploadFile");
        // 用uuid作爲文件名,防止生成的臨時文件重複
        String fileAdd = UUID.randomUUID().toString() + ".docx";
        // 構建一個臨時文件
        File uploadFile = new File(realPath, fileAdd);
        //將上傳的MultipartFile格式文件轉換爲創建的新文件
        multfile.transferTo(uploadFile);
        //獲取新文件的絕對路徑
        String filePath = uploadFile.getAbsolutePath();

        String buffer = "";
        JSONObject msg = new JSONObject();
        try {
            InputStream inIo = new FileInputStream(uploadFile);
            //提取文本內容
            if (fileName.endsWith(".doc")) {
                WordExtractor ex = new WordExtractor(inIo);
                buffer = ex.getText();
                ex.close();
            } else if (fileName.endsWith(".docx")) {
                OPCPackage opcPackage = POIXMLDocument.openPackage(filePath);
                POIXMLTextExtractor extractor = new XWPFWordExtractor(opcPackage);
                buffer = extractor.getText();
                extractor.close();
            }
            //刪除上傳存放的臨時文件
            uploadFile.delete();
            msg.put("status", true);
            msg.put("msg", buffer);
        } catch (Exception e) {
            e.printStackTrace();
            msg.put("status", false);
            msg.put("msg", "文件內容提取失敗");
        }
        return retString(msg);
    }

    /**
     * json格式化;
     * @param ret
     * @return
     */
    private String retString(JSONObject ret) {
        String jsoStr = "";
        try {
            jsoStr = JSON.json(ret);
        } catch (IOException e) {
            e.printStackTrace();
            return jsoStr;
        }
        return jsoStr;
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章