本文方法借鉴于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")) { //篇的字号是小三:1533 pian = p.getParagraphText();34 article.setPian(pian);35 }else if(level.equals("2201812")) { //章的字号是四号:1436 if(!isFirst) {37 userDao.add(article);38 isFirst = true;39 }40 zhang = p.getParagraphText();41 article.setZhang(zhang);42 }else if(level.equals("3132020")) { //每个热词的字号是1343 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")) { //段落的字号是小五:949 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 }
以上就是全部内容,如果并不能理解博主的方法,可以看一看博主推荐的博客。