JAVA读取WORD,EXCEL,PDF,TXT,RTF,HTML文件文本内容的方法示例

以下是Java对几种文本文件内容读取代码。其中,OFFICE文档(WORD,EXCEL)使用了POI控件,PDF使用了PDFBOX控件。

  点击这里 查看相关控件的下载地址和配置方法。

[java]  view plain copy
  1.  WORD   
  2.   
  3. Java代码   
  4. package textReader;      
  5. import java.io.*;      
  6. import org.apache.poi.hwpf.extractor.WordExtractor;      
  7.      
  8. public class WordReader {      
  9.     public WordReader(){      
  10.     }      
  11.     /**    
  12.      * @param filePath 文件路径    
  13.      * @return 读出的Word的内容    
  14.      */     
  15.     public String getTextFromWord(String filePath){      
  16.         String result = null;      
  17.         File file = new File(filePath);      
  18.         try{      
  19.             FileInputStream fis = new FileInputStream(file);      
  20.             WordExtractor wordExtractor = new WordExtractor(fis);      
  21.             result = wordExtractor.getText();      
  22.         }catch(FileNotFoundException e){      
  23.             e.printStackTrace();      
  24.         }catch(IOException e){      
  25.             e.printStackTrace();      
  26.         };      
  27.         return result;      
  28.     }      
  29. }     
  30.   
  31. package textReader;  
  32. import java.io.*;  
  33. import org.apache.poi.hwpf.extractor.WordExtractor;  
  34. public class WordReader {  
  35. public WordReader(){  
  36. }  
  37. /** 
  38. * @param filePath 文件路径 
  39. * @return 读出的Word的内容 
  40. */  
  41. public String getTextFromWord(String filePath){  
  42. String result = null;  
  43. File file = new File(filePath);  
  44. try{  
  45. FileInputStream fis = new FileInputStream(file);  
  46. WordExtractor wordExtractor = new WordExtractor(fis);  
  47. result = wordExtractor.getText();  
  48. }catch(FileNotFoundException e){  
  49. e.printStackTrace();  
  50. }catch(IOException e){  
  51. e.printStackTrace();  
  52. };  
  53. return result;  
  54. }  
  55. }  
  56.   
  57.      
  58.   
  59.   EXCEL   
  60.   
  61. Java代码   
  62. package textReader;      
  63. import org.apache.poi.hssf.usermodel.HSSFWorkbook;      
  64. import org.apache.poi.hssf.usermodel.HSSFSheet;      
  65. import org.apache.poi.hssf.usermodel.HSSFRow;      
  66. import org.apache.poi.hssf.usermodel.HSSFCell;      
  67.      
  68. import java.io.FileInputStream;      
  69. import java.io.FileNotFoundException;      
  70. import java.io.IOException;      
  71.      
  72.      
  73. public class ExcelReader {      
  74.      
  75.     @SuppressWarnings("deprecation")      
  76.     /**    
  77.      * @param filePath 文件路径    
  78.      * @return 读出的Excel的内容    
  79.      */     
  80.     public String getTextFromExcel(String filePath) {      
  81.         StringBuffer buff = new StringBuffer();      
  82.         try {      
  83.             //创建对Excel工作簿文件的引用      
  84.             HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(filePath));      
  85.             //创建对工作表的引用。              
  86.             for (int numSheets = 0; numSheets < wb.getNumberOfSheets(); numSheets++) {      
  87.                 if (null != wb.getSheetAt(numSheets)) {      
  88.                     HSSFSheet aSheet = wb.getSheetAt(numSheets);//获得一个sheet      
  89.                     for (int rowNumOfSheet = 0; rowNumOfSheet <= aSheet.getLastRowNum(); rowNumOfSheet++) {      
  90.                         if (null != aSheet.getRow(rowNumOfSheet)) {      
  91.                             HSSFRow aRow = aSheet.getRow(rowNumOfSheet); //获得一个行      
  92.                             for (int cellNumOfRow = 0; cellNumOfRow <= aRow.getLastCellNum(); cellNumOfRow++) {      
  93.                                 if (null != aRow.getCell(cellNumOfRow)) {      
  94.                                     HSSFCell aCell = aRow.getCell(cellNumOfRow);//获得列值      
  95.                                     switch(aCell.getCellType()){      
  96.                                         case HSSFCell.CELL_TYPE_FORMULA:      
  97.                                             break;       
  98.                                         case HSSFCell.CELL_TYPE_NUMERIC:      
  99.                                             buff.append(aCell.getNumericCellValue()).append('/t');break;      
  100.                                         case HSSFCell.CELL_TYPE_STRING:      
  101.                                             buff.append(aCell.getStringCellValue()).append('/t');break;                                                                   
  102.                                 }                                 
  103.                         }                                                                                      
  104.                     }      
  105.                     buff.append('/n');      
  106.                     }      
  107.                 }                                            
  108.             }                 
  109.         }      
  110.         } catch (FileNotFoundException e) {      
  111.             e.printStackTrace();      
  112.         } catch (IOException e) {      
  113.             e.printStackTrace();      
  114.         }      
  115.         return buff.toString();      
  116.     }                  
  117. }     
  118. package textReader;  
  119. import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
  120. import org.apache.poi.hssf.usermodel.HSSFSheet;  
  121. import org.apache.poi.hssf.usermodel.HSSFRow;  
  122. import org.apache.poi.hssf.usermodel.HSSFCell;  
  123. import java.io.FileInputStream;  
  124. import java.io.FileNotFoundException;  
  125. import java.io.IOException;  
  126. public class ExcelReader {  
  127. @SuppressWarnings("deprecation")  
  128. /** 
  129. * @param filePath 文件路径 
  130. * @return 读出的Excel的内容 
  131. */  
  132. public String getTextFromExcel(String filePath) {  
  133. StringBuffer buff = new StringBuffer();  
  134. try {  
  135. //创建对Excel工作簿文件的引用  
  136. HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(filePath));  
  137. //创建对工作表的引用。  
  138. for (int numSheets = 0; numSheets < wb.getNumberOfSheets(); numSheets++) {  
  139. if (null != wb.getSheetAt(numSheets)) {  
  140. HSSFSheet aSheet = wb.getSheetAt(numSheets);//获得一个sheet  
  141. for (int rowNumOfSheet = 0; rowNumOfSheet <= aSheet.getLastRowNum(); rowNumOfSheet++) {  
  142. if (null != aSheet.getRow(rowNumOfSheet)) {  
  143. HSSFRow aRow = aSheet.getRow(rowNumOfSheet); //获得一个行  
  144. for (int cellNumOfRow = 0; cellNumOfRow <= aRow.getLastCellNum(); cellNumOfRow++) {  
  145. if (null != aRow.getCell(cellNumOfRow)) {  
  146. HSSFCell aCell = aRow.getCell(cellNumOfRow);//获得列值  
  147. switch(aCell.getCellType()){  
  148. case HSSFCell.CELL_TYPE_FORMULA:  
  149. break;  
  150. case HSSFCell.CELL_TYPE_NUMERIC:  
  151. buff.append(aCell.getNumericCellValue()).append('/t');break;  
  152. case HSSFCell.CELL_TYPE_STRING:  
  153. buff.append(aCell.getStringCellValue()).append('/t');break;  
  154. }  
  155. }  
  156. }  
  157. buff.append('/n');  
  158. }  
  159. }  
  160. }  
  161. }  
  162. catch (FileNotFoundException e) {  
  163. e.printStackTrace();  
  164. catch (IOException e) {  
  165. e.printStackTrace();  
  166. }  
  167. return buff.toString();  
  168. }  
  169. }  
  170.   
  171.     
  172.   
  173.   PDF     
  174.   
  175. Java代码   
  176. package textReader;      
  177. import java.io.FileInputStream;      
  178. import java.io.FileNotFoundException;      
  179. import java.io.IOException;      
  180.      
  181. import org.pdfbox.pdfparser.PDFParser;      
  182. import org.pdfbox.pdmodel.PDDocument;      
  183. import org.pdfbox.util.PDFTextStripper;      
  184.      
  185.      
  186. public class PdfReader {      
  187.     public PdfReader(){      
  188.     }      
  189.     /**    
  190.      * @param filePath 文件路径    
  191.      * @return 读出的pdf的内容    
  192.      */     
  193.     public String getTextFromPdf(String filePath) {      
  194.         String result = null;      
  195.         FileInputStream is = null;      
  196.         PDDocument document = null;      
  197.         try {      
  198.             is = new FileInputStream(filePath);      
  199.             PDFParser parser = new PDFParser(is);      
  200.             parser.parse();      
  201.             document = parser.getPDDocument();      
  202.             PDFTextStripper stripper = new PDFTextStripper();      
  203.             result = stripper.getText(document);      
  204.         } catch (FileNotFoundException e) {      
  205.             e.printStackTrace();      
  206.         } catch (IOException e) {      
  207.             e.printStackTrace();      
  208.         } finally {      
  209.             if (is != null) {      
  210.                 try {is.close();}catch(IOException e){e.printStackTrace();}      
  211.             }      
  212.             if (document != null) {      
  213.                 try{document.close();}catch (IOException e){e.printStackTrace();}      
  214.             }      
  215.         }      
  216.         return result;      
  217.     }      
  218.      
  219. }     
  220. package textReader;  
  221. import java.io.FileInputStream;  
  222. import java.io.FileNotFoundException;  
  223. import java.io.IOException;  
  224. import org.pdfbox.pdfparser.PDFParser;  
  225. import org.pdfbox.pdmodel.PDDocument;  
  226. import org.pdfbox.util.PDFTextStripper;  
  227. public class PdfReader {  
  228. public PdfReader(){  
  229. }  
  230. /** 
  231. * @param filePath 文件路径 
  232. * @return 读出的pdf的内容 
  233. */  
  234. public String getTextFromPdf(String filePath) {  
  235. String result = null;  
  236. FileInputStream is = null;  
  237. PDDocument document = null;  
  238. try {  
  239. is = new FileInputStream(filePath);  
  240. PDFParser parser = new PDFParser(is);  
  241. parser.parse();  
  242. document = parser.getPDDocument();  
  243. PDFTextStripper stripper = new PDFTextStripper();  
  244. result = stripper.getText(document);  
  245. catch (FileNotFoundException e) {  
  246. e.printStackTrace();  
  247. catch (IOException e) {  
  248. e.printStackTrace();  
  249. finally {  
  250. if (is != null) {  
  251. try {is.close();}catch(IOException e){e.printStackTrace();}  
  252. }  
  253. if (document != null) {  
  254. try{document.close();}catch (IOException e){e.printStackTrace();}  
  255. }  
  256. }  
  257. return result;  
  258. }  
  259. }  
  260.   
  261.   TXT   
  262.   
  263. Java代码   
  264. package textReader;      
  265. import java.io.*;      
  266.      
  267.      
  268. public class TxtReader {      
  269.     public TxtReader() {              
  270.     }      
  271.     /**    
  272.      * @param filePath 文件路径    
  273.      * @return 读出的txt的内容    
  274.      */     
  275.     public String getTextFromTxt(String filePath) throws Exception {      
  276.               
  277.         FileReader fr = new FileReader(filePath);      
  278.         BufferedReader br = new BufferedReader(fr);      
  279.         StringBuffer buff = new StringBuffer();      
  280.         String temp = null;      
  281.         while((temp = br.readLine()) != null){      
  282.             buff.append(temp + "/r/n");      
  283.         }      
  284.         br.close();           
  285.         return buff.toString();           
  286.     }      
  287. }     
  288. package textReader;  
  289. import java.io.*;  
  290. public class TxtReader {  
  291. public TxtReader() {  
  292. }  
  293. /** 
  294. * @param filePath 文件路径 
  295. * @return 读出的txt的内容 
  296. */  
  297. public String getTextFromTxt(String filePath) throws Exception {  
  298. FileReader fr = new FileReader(filePath);  
  299. BufferedReader br = new BufferedReader(fr);  
  300. StringBuffer buff = new StringBuffer();  
  301. String temp = null;  
  302. while((temp = br.readLine()) != null){  
  303. buff.append(temp + "/r/n");  
  304. }  
  305. br.close();  
  306. return buff.toString();  
  307. }  
  308. }  
  309. RTF   
  310.   
  311. Java代码   
  312. package textReader;      
  313. import java.io.File;      
  314. import java.io.FileInputStream;      
  315. import java.io.IOException;      
  316. import java.io.InputStream;      
  317.      
  318. import javax.swing.text.BadLocationException;      
  319. import javax.swing.text.DefaultStyledDocument;      
  320. import javax.swing.text.rtf.RTFEditorKit;      
  321.      
  322.      
  323. public class RtfReader {      
  324.     public RtfReader(){      
  325.     }      
  326.     /**    
  327.      * @param filePath 文件路径    
  328.      * @return 读出的rtf的内容    
  329.      */     
  330.     public String getTextFromRtf(String filePath) {      
  331.         String result = null;      
  332.         File file = new File(filePath);      
  333.         try {             
  334.             DefaultStyledDocument styledDoc = new DefaultStyledDocument();      
  335.             InputStream is = new FileInputStream(file);      
  336.             new RTFEditorKit().read(is, styledDoc, 0);      
  337.             result = new String(styledDoc.getText(0,styledDoc.getLength()).getBytes("ISO8859_1"));      
  338.             //提取文本,读取中文需要使用ISO8859_1编码,否则会出现乱码      
  339.         } catch (IOException e) {      
  340.             e.printStackTrace();      
  341.         } catch (BadLocationException e) {      
  342.             e.printStackTrace();      
  343.         }      
  344.         return result;      
  345.     }      
  346.           
  347. }     
  348. package textReader;  
  349. import java.io.File;  
  350. import java.io.FileInputStream;  
  351. import java.io.IOException;  
  352. import java.io.InputStream;  
  353. import javax.swing.text.BadLocationException;  
  354. import javax.swing.text.DefaultStyledDocument;  
  355. import javax.swing.text.rtf.RTFEditorKit;  
  356. public class RtfReader {  
  357. public RtfReader(){  
  358. }  
  359. /** 
  360. * @param filePath 文件路径 
  361. * @return 读出的rtf的内容 
  362. */  
  363. public String getTextFromRtf(String filePath) {  
  364. String result = null;  
  365. File file = new File(filePath);  
  366. try {  
  367. DefaultStyledDocument styledDoc = new DefaultStyledDocument();  
  368. InputStream is = new FileInputStream(file);  
  369. new RTFEditorKit().read(is, styledDoc, 0);  
  370. result = new String(styledDoc.getText(0,styledDoc.getLength()).getBytes("ISO8859_1"));  
  371. //提取文本,读取中文需要使用ISO8859_1编码,否则会出现乱码  
  372. catch (IOException e) {  
  373. e.printStackTrace();  
  374. catch (BadLocationException e) {  
  375. e.printStackTrace();  
  376. }  
  377. return result;  
  378. }  
  379. }  
  380.    HTML   
  381.   
  382. Java代码   
  383. package textReader;      
  384. import java.io.*;      
  385.      
  386. public class HtmlReader {      
  387.     public HtmlReader() {      
  388.     }      
  389.     /**    
  390.      * @param filePath 文件路径    
  391.      * @return 获得html的全部内容    
  392.      */     
  393.     public String readHtml(String filePath) {      
  394.         BufferedReader br=null;      
  395.         StringBuffer sb = new  StringBuffer();      
  396.         try {      
  397.             br=new BufferedReader(new InputStreamReader(new FileInputStream(filePath),  "GB2312"));               
  398.             String temp=null;             
  399.             while((temp=br.readLine())!=null){      
  400.                 sb.append(temp);      
  401.             }                 
  402.         } catch (FileNotFoundException e) {      
  403.             e.printStackTrace();      
  404.         } catch (IOException e) {      
  405.             e.printStackTrace();      
  406.         }      
  407.         return sb.toString();      
  408.     }      
  409.     /**    
  410.      * @param filePath 文件路径    
  411.      * @return 获得的html文本内容    
  412.      */     
  413.     public String getTextFromHtml(String filePath) {      
  414.         //得到body标签中的内容      
  415.         String str= readHtml(filePath);      
  416.         StringBuffer buff = new StringBuffer();      
  417.         int maxindex = str.length() - 1;      
  418.         int begin = 0;      
  419.         int end;                  
  420.         //截取>和<之间的内容      
  421.         while((begin = str.indexOf('>',begin)) < maxindex){                 
  422.             end = str.indexOf('<',begin);      
  423.             if(end - begin > 1){      
  424.                 buff.append(str.substring(++begin, end));                     
  425.             }                 
  426.             begin = end+1;      
  427.         };            
  428.         return buff.toString();      
  429.     }      
  430.      
  431. }     
  432. package textReader;  
  433. import java.io.*;  
  434. public class HtmlReader {  
  435. public HtmlReader() {  
  436. }  
  437. /** 
  438. * @param filePath 文件路径 
  439. * @return 获得html的全部内容 
  440. */  
  441. public String readHtml(String filePath) {  
  442. BufferedReader br=null;  
  443. StringBuffer sb = new  StringBuffer();  
  444. try {  
  445. br=new BufferedReader(new InputStreamReader(new FileInputStream(filePath),  "GB2312"));  
  446. String temp=null;  
  447. while((temp=br.readLine())!=null){  
  448. sb.append(temp);  
  449. }  
  450. catch (FileNotFoundException e) {  
  451. e.printStackTrace();  
  452. catch (IOException e) {  
  453. e.printStackTrace();  
  454. }  
  455. return sb.toString();  
  456. }  
  457. /** 
  458. * @param filePath 文件路径 
  459. * @return 获得的html文本内容 
  460. */  
  461. public String getTextFromHtml(String filePath) {  
  462. //得到body标签中的内容  
  463. String str= readHtml(filePath);  
  464. StringBuffer buff = new StringBuffer();  
  465. int maxindex = str.length() - 1;  
  466. int begin = 0;  
  467. int end;  
  468. //截取>和<之间的内容  
  469. while((begin = str.indexOf('>',begin)) < maxindex){  
  470. end = str.indexOf('<',begin);  
  471. if(end - begin > 1){  
  472. buff.append(str.substring(++begin, end));  
  473. }  
  474. begin = end+1;  
  475. };  
  476. return buff.toString();  
  477. }  
  478. }  

注意 :若使用WPS编辑相关文档,会有错误提示,应避免。

  错误文本提示如下:

WORD

Your document seemed to be mostly unicode, but the section definition was in bytes! Trying anyway, but things may well go wrong!

EXCEL

java.lang.RuntimeException: Expected an EXTERNSHEET record but got (org.apache.poi.hssf.record.SSTRecord)
    at org.apache.poi.hssf.model.LinkTable.readExtSheetRecord(LinkTable.java:187)
    at org.apache.poi.hssf.model.LinkTable.<init>(LinkTable.java:163)
    at org.apache.poi.hssf.model.Workbook.createWorkbook(Workbook.java:199)
    at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:273)
    at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:196)
    at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:312)
    at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:293)
    at textReader.ExcelReader.getTextFromExcel(ExcelReader.java:23)
    at DocumentInfo.getContent(DocumentInfo.java:86)
    at MainFunction.main(MainFunction.java:19)

RTF

java.io.IOException: Too many close-groups in RTF text
    at javax.swing.text.rtf.RTFParser.write(Unknown Source)
    at javax.swing.text.rtf.RTFParser.writeSpecial(Unknown Source)
    at javax.swing.text.rtf.AbstractFilter.write(Unknown Source)
    at javax.swing.text.rtf.AbstractFilter.readFromStream(Unknown Source)
    at javax.swing.text.rtf.RTFEditorKit.read(Unknown Source)
    at textReader.RtfReader.getTextFromRtf(RtfReader.java:25)
    at DocumentInfo.getContent(DocumentInfo.java:74)
    at MainFunction.main(MainFunction.java:19)

BODY { FONT-FAMILY:Tahoma; FONT-SIZE:10pt } P { FONT-FAMILY:Tahoma; FONT-SIZE:10pt } DIV { FONT-FAMILY:Tahoma; FONT-SIZE:10pt } TD { FONT-FAMILY:Tahoma; FONT-SIZE:10pt }   顺便说一下,这里为什么会在write出错呢?因为 level是根据{和}来进行自增和自减的,当括号不匹配的时候就会提示该错误。 wps编辑rtf文件在格式上出了问题,{和}不匹配。 但用word或写字板下新建文件,编辑后另存为rtf文件(wps下不支持),用记事本打开可以发现添加了很多格式说明,但是{和}是匹配的,这样才不会报错。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值