佳麗斯 加厚雙人/單人秋冬被子暖冬 羊毛被芯羊毛柔絲被特價(jià)包郵 憂憂魚冬外穿打底褲女秋冬厚長(zhǎng)褲女褲加絨加厚高腰彈力鉛筆褲靴褲 韓國(guó)代購(gòu)2013新款 韓版秋冬休閑女時(shí)尚磨破口袋衛(wèi)衣韓版學(xué)生裝 潮

          有時(shí),退一步,能一口氣進(jìn)幾步,只是這先退一步需要勇氣和自信。

          用心愛(ài)你,努力工作。

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            70 隨筆 :: 1 文章 :: 33 評(píng)論 :: 0 Trackbacks
              在開發(fā)中,經(jīng)常遇到需要用去解析各類非結(jié)構(gòu)化文本,像doc,xls,pdf,ppt,xml,html.
              本人在開發(fā)站內(nèi)搜索時(shí),需要加入對(duì)各類文件類型的支持,以方便建立索引。解析各類文檔調(diào)用了幾個(gè)開源的包。像dom4j-1.6.1.jar,F(xiàn)ontBox-0.1.0-dev.jar,htmllexer.jar,htmlparser.jar,PDFBox-0.7.3.jar,poi-3.5-FINAL-20090928.jar,poi-scratchpad-3.5-FINAL-20090928.jar。這些開源的包可以讓我們很方便去解析各類非結(jié)構(gòu)化文本。

          jar包的下載地址: http://www.ziddu.com/download/7017588/devlib.rar.html

          代碼如下:
          package com.ducklyl;

          import java.io.File;
          import java.io.FileInputStream;
          import java.util.Iterator;
          import org.apache.poi.hslf.model.Slide;
          import org.apache.poi.hslf.model.TextRun;
          import org.apache.poi.hslf.usermodel.SlideShow;
          import org.apache.poi.hssf.usermodel.HSSFCell;
          import org.apache.poi.hssf.usermodel.HSSFRow;
          import org.apache.poi.hssf.usermodel.HSSFSheet;
          import org.apache.poi.hssf.usermodel.HSSFWorkbook;
          import org.apache.poi.hwpf.HWPFDocument;
          import org.apache.poi.hwpf.usermodel.Paragraph;
          import org.apache.poi.hwpf.usermodel.Range;
          import org.dom4j.Document;
          import org.dom4j.Element;
          import org.dom4j.io.SAXReader;
          import org.htmlparser.Parser;
          import org.htmlparser.filters.*;

          import org.htmlparser.*;
          import org.htmlparser.nodes.TextNode;
          import org.htmlparser.util.*;

          import org.pdfbox.pdfparser.PDFParser;
          import org.pdfbox.pdmodel.PDDocument;
          import org.pdfbox.util.PDFTextStripper;



          public class HandleFile {
              
          public static void main(String args[]){
                  String str
          ="e:\\test.HTML";
                  System.out.println(handleFile(str));
              }

              
          public static String handleFile(String filename){
                  String result
          ="";
                  String fileType
          =filename.substring(filename.lastIndexOf(".")+1, filename.length());
                  
          if(fileType.equalsIgnoreCase("pdf"))
                      result
          =handlePdf(filename);
                  
          else if(fileType.equalsIgnoreCase("xls"))
                      result
          =handleExcel(filename);
                  
          else if(fileType.equalsIgnoreCase("doc"))
                      result
          =handleDoc(filename);
                  
          else if(fileType.equalsIgnoreCase("xml"))
                      result
          =handleXml(filename);
                  
          else if(fileType.equalsIgnoreCase("ppt"))
                      result
          =handlePPT(filename);
                  
          else if(fileType.equalsIgnoreCase("htm")||fileType.equalsIgnoreCase("html"))
                      result
          =handleHtml(filename);
                  
          return result;
              }
          /**
           * 解析HTML
           * 
          @param filename
           * 
          @return
           
          */
              
          public static String handleHtml(String filename){
                  String content
          ="";
                  
          try{
                      File file
          =new File(filename);
                      
          if(!file.exists()) return content;
                      
                      Parser parser
          =new Parser(filename);
                      parser.setEncoding(
          "UTF-8");
                      NodeFilter textFilter
          =new NodeClassFilter(TextNode.class);
                      NodeList nodes
          =parser.extractAllNodesThatMatch(textFilter);
                      
          for(int i=0;i<nodes.size();i++){
                          TextNode textnode
          =(TextNode)nodes.elementAt(i);
                          String line
          =textnode.toPlainTextString().trim();
                          
          if(line.equals("")) continue;
                          content
          =content+line;
                      }
                  }
          catch(Exception e){
                      e.printStackTrace();
                  }
                  
          return content;
              }
              
          /**
               * 解析PPT
               * 
          @param filename
               * 
          @return
               
          */
              
          public static String handlePPT(String filename){
                  StringBuffer content 
          = new StringBuffer("");
                  
          try{
                      File file
          =new File(filename);
                      
          if(!file.exists()) {
                          
          return content.toString();
                      }
                      FileInputStream instream
          =new FileInputStream(file);
                      SlideShow ppt 
          = new SlideShow(instream);
                      Slide[] slides 
          = ppt.getSlides();
                      
          for(int i=0;i<slides.length;i++){
                          TextRun[] t 
          = slides[i].getTextRuns();//為了取得幻燈片的文字內(nèi)容,建立TextRun
                          for(int j=0;j<t.length;j++){
                              content.append(t[j].getText());
          //這里會(huì)將文字內(nèi)容加到content中去
                          }
                          content.append(slides[i].getTitle());
                      }
                  }
          catch(Exception e){
                      e.printStackTrace();
                  }
                  
          return content.toString();
              }
              
          /**
               * 解析XML
               * 
          @param filename
               * 
          @return
               
          */
              
          public static String handleXml(String filename){
                  String content
          ="",value="",text="";
                  
          try{
                      File file
          =new File(filename);
                      
          if(!file.exists()) {
                          
          return content;
                      }
                        SAXReader saxReader 
          = new SAXReader();
                        Document document 
          = saxReader.read(file);
                        Element root 
          = document.getRootElement() ;
                        
                        Iterator iter
          =root.elementIterator() ;
                         
          while(iter.hasNext()){
                            Element element
          =(Element)iter.next();
                            value
          =element.getStringValue();
                            
          if(!value.trim().equals(""))    content=content+value;
                         }
                  }
          catch(Exception e){
                          e.printStackTrace();
                  }
                  
          return content;
              }
              
          /**
               * 解析DOC
               * 
          @param filename
               * 
          @return
               
          */
              
          public static String handleDoc(String filename){
                  String content
          ="";
                  
          try{
                      File file
          =new File(filename);
                      
          if(!file.exists()) {
                          
          return content;
                      }
                      FileInputStream instream
          =new FileInputStream(file);
                      HWPFDocument doc
          =new HWPFDocument(instream);
                      Range range
          =doc.getRange();
                      String text
          =range.text();
                      
          for(int i=0;i<range.numParagraphs();i++){
                          Paragraph p
          =range.getParagraph(i);
                          content
          =content+p.text().trim()+"\n";
                      }
                  }
          catch(Exception e){
                      e.printStackTrace();
                  }
                  
          return content;
              }
              
          /**
               * 解析PDF
               * 
          @param filename
               * 
          @return
               
          */
              
          public static String handlePdf(String filename){
                  String contenttxt
          ="";
                  
          try{
                      File file
          =new File(filename);
                      
          if(!file.exists()){
                          
          return contenttxt;
                      }
                      FileInputStream instream
          =new FileInputStream(file);
                      PDFParser parser
          =new PDFParser(instream);
                      parser.parse();
                      PDDocument pdfdocument
          =parser.getPDDocument();
                      PDFTextStripper pdfstripper
          =new PDFTextStripper();
                      contenttxt
          =pdfstripper.getText(pdfdocument);
                  }
          catch(Exception e){
                      e.printStackTrace();
                  }
                  
          return contenttxt;
              }
              
          /**
               * 解析EXCEL
               * 
          @param filename
               * 
          @return
               
          */
              
          public static String handleExcel(String filename){
                  String content
          ="";
                  
          try{
                      File file
          =new File(filename);
                      
          if(!file.exists()) {
                          
          return content;
                      }
                      HSSFWorkbook workbook
          =new HSSFWorkbook(new FileInputStream(file));
                      HSSFSheet sheet
          =workbook.getSheetAt(0);
                      
                      
          for(int i=0;i<workbook.getNumberOfSheets();i++){
                          sheet
          =workbook.getSheetAt(i);
                          
          if(sheet!=null){
                              
          for(int m=0;m<sheet.getLastRowNum();m++){
                                  HSSFRow row
          =sheet.getRow(m);
                                  
          if(row==nullbreak;
                                  
                                  
          for(int n=0;n<row.getLastCellNum();n++){
                                      HSSFCell cell
          =row.getCell(n);
                                      
          if(cell==nullbreak;
                                      
          int type=cell.getCellType();
                                      
          switch(type){
                                          
          case 0:
                                              content
          =content+cell.getNumericCellValue();
                                              
          break;
                                          
          case 1:
                                              content
          =content+cell.getStringCellValue();
                                              
          break;
                                          
          case 3:
                                              
          break;
                                          
          default:
                                              ;
                                      }
                                  }
                                  content
          =content+"\n";
                              }
                          }
                          content
          =content+"\n";
                      }

                  }
          catch(Exception e){    
                      e.printStackTrace();
                  }
                  
          return content;
              }
          }
          不想拷貝的朋友可以直接下載源代碼:http://www.ziddu.com/download/7017614/src.txt.html

          以上代碼比較簡(jiǎn)單,就不作說(shuō)明,希望能幫到需要用的朋友。當(dāng)然上面只是一個(gè)簡(jiǎn)單的例子,如果要具體應(yīng)用,大家可以自己再改寫。如果你有其它的想法,歡迎分享你的精彩想法。


          轉(zhuǎn)載請(qǐng)注明出處

          posted on 2009-10-22 10:55 王生生 閱讀(1633) 評(píng)論(0)  編輯  收藏 所屬分類: Java
          森露2013新款豹紋打底衫 高領(lǐng) 女 長(zhǎng)袖 修身長(zhǎng)袖t恤女 加絨加厚冬 2013春秋新款女裝 潮修身大碼長(zhǎng)袖小西裝外套女 韓版中長(zhǎng)款小西裝 憂憂魚2013秋冬新款直筒褲女顯瘦長(zhǎng)褲加絨黑色休閑褲修身西褲女褲
          主站蜘蛛池模板: 彩票| 石渠县| 汉阴县| 会泽县| 丹阳市| 垦利县| 永昌县| 轮台县| 门源| 台湾省| 山丹县| 阜康市| 息烽县| 福州市| 望都县| 浦江县| 迁安市| 达孜县| 开化县| 博湖县| 马鞍山市| 赤城县| 南康市| 阜平县| 界首市| 基隆市| 灌南县| 建瓯市| 邛崃市| 清涧县| 孝义市| 河津市| 尚志市| 通海县| 珠海市| 曲阜市| 济宁市| 和林格尔县| 岳阳市| 景德镇市| 蚌埠市|