本文方法借鑒於https://www.cnblogs.com/ljysy/p/10574197.html
在經過朋友的指導下,在處理文檔的方式上有所不同。
我的數據庫使用的是SQL server,這篇博客將不介紹如何將數據存儲進數據庫中,只進行java POI處理文檔數據的介紹,在處理完數據后,如果想要存儲進不同的數據庫的話,只需要更改數據的連接池以及存儲代碼即可。
1 import java.io.File; 2 import java.io.FileInputStream; 3 import java.util.HashMap; 4 import java.util.List; 5 import java.util.Map; 6 7 import org.apache.poi.xwpf.usermodel.XWPFDocument; 8 import org.apache.poi.xwpf.usermodel.XWPFParagraph; 9 10 import Bean.Article; 11 import Dao.IDao; 12 import Dao.UserDaoImpl; 13 14 public class WordToSql { 15 16 public static String pian; 17 public static String zhang; 18 19 public static void readAndWriter(String fileName)throws Exception { 20 File file = new File(fileName); 21 try { 22 FileInputStream fis = new FileInputStream(file); 23 XWPFDocument xdoc = new XWPFDocument(fis); 24 List<XWPFParagraph>paras = xdoc.getParagraphs(); 25 Article article = new Article(); 26 IDao userDao = new UserDaoImpl(); 27 boolean isFirst = true; 28 for(XWPFParagraph p:paras) { //遍歷段落 29 String level = p.getStyleID(); 30 System.out.println(level); 31 if(level==null)continue; 32 if(level.equals("12030")) { //篇的字號是小三:15 33 pian = p.getParagraphText(); 34 article.setPian(pian); 35 }else if(level.equals("2201812")) { //章的字號是四號:14 36 if(!isFirst) { 37 userDao.add(article); 38 isFirst = true; 39 } 40 zhang = p.getParagraphText(); 41 article.setZhang(zhang); 42 }else if(level.equals("3132020")) { //每個熱詞的字號是13 43 if(isFirst)isFirst = false; 44 else userDao.add(article); 45 String title = p.getParagraphText(); 46 article.setTitle(title); 47 article.setContent(null); 48 }else if(level.equals("41")) { //段落的字號是小五:9 49 String content = p.getParagraphText(); 50 if(article.getContent()!=null)content =article.getContent()+ content; 51 article.setContent(content); 52 } 53 } 54 fis.close(); 55 }catch(Exception e) { 56 System.out.println("WordToSql:"+e.getMessage()); 57 } 58 } 59 60 }
在這一部分代碼中,有一部分方法是POI的jar包自帶的方法,如getParagraphs()和getStyleID()方法。
在博主推薦的那篇博客中,處理數據的方式也是根據字號進行,不過在博主使用后發現數據庫中並沒有導入數據,最后發現錯誤的原因是由於字號錯誤,於是在使用getStyleID()方法后,我將字號輸出,最后發現這四種不同的字號。
isFirst的true和false將控制調用存儲函數的時間點,可在仔細看過代碼后,進行理解。
以下是存儲函數的代碼:
1 import java.sql.Connection; 2 import java.sql.PreparedStatement; 3 4 import Bean.Article; 5 import Util.DBUtil; 6 7 public class UserDaoImpl implements IDao{ 8 9 public void add(Article article) { 10 Connection con = DBUtil.getConnection(); 11 PreparedStatement pre = null; 12 String sql = "insert into data(pian,zhang,title,context) values(?,?,?,?)"; 13 try { 14 pre = con.prepareStatement(sql); 15 pre.setString(1,article.getPian()); 16 pre.setString(2,article.getZhang()); 17 pre.setString(3,article.getTitle()); 18 pre.setString(4,article.getContent()); 19 pre.executeUpdate(); 20 System.out.println("添加成功!"); 21 }catch(Exception e) { 22 System.out.println(e.getMessage()); 23 }finally { 24 DBUtil.close(pre); 25 DBUtil.close(con); 26 } 27 } 28 29 }
以上就是全部內容,如果並不能理解博主的方法,可以看一看博主推薦的博客。