應用Java讀取Word文件的簡略例子分享。本站提示廣大學習愛好者:(應用Java讀取Word文件的簡略例子分享)文章只能為提供參考,不一定能成為您想要的結果。以下是應用Java讀取Word文件的簡略例子分享正文
java讀取word文檔時,固然網上引見了許多插件poi、java2Word、jacob、itext等等,poi沒法讀取格局(新的API估量行似乎還在處於研發階段,不太穩固,做項目不太敢用);java2Word、jacob輕易報錯找不到注冊,比擬詭異,我已經在分歧的機械上試過,操作辦法完整分歧,有的機械不報錯,有的報錯,去他們服裝論壇t.vhao.net找高人處理也說不出緣由,項目安排用它有點玄;itxt似乎寫很便利然則我查了很久材料沒有見到過關於讀的好方法。經由一番選擇照樣折衷點采取rtf最好,究竟rtf是開源格局,不須要借助任何插件,只需根本IO操作外加編碼轉換便可。rtf格局文件外面看來和doc沒啥差別,都可以用word翻開,各類格局都可以設定。
----- 完成的功效:讀取rtf模板內容(格局和文本內容),調換變更部門,構成新的rtf文檔。
----- 完成思緒:模板中固定部門手動輸出,變更的部門用$info$表現,只需調換$info$便可。
1、采取字節的情勢讀取rtf模板內容
2、將可變的內容字符串轉為rtf編碼
3、調換原文中的可變部門,構成新的rtf文檔
重要法式以下:
public String bin2hex(String bin) {
char[] digital = "0123456789ABCDEF".toCharArray();
StringBuffer sb = new StringBuffer("");
byte[] bs = bin.getBytes();
int bit;
for (int i = 0; i < bs.length;i++) {
bit = (bs[i] & 0x0f0) >> 4;
sb.append("\\'");
sb.append(digital[bit]);
bit = bs[i] & 0x0f;
sb.append(digital[bit]);
}
return sb.toString();
}
public String readByteRtf(InputStream ins, String path){
String sourcecontent = "";
try{
ins = new FileInputStream(path);
byte[] b = new byte[1024];
if (ins == null) {
System.out.println("源模板文件不存在");
}
int bytesRead = 0;
while (true) {
bytesRead = ins.read(b, 0, 1024); // return final read bytes counts
if(bytesRead == -1) {// end of InputStream
System.out.println("讀取模板文件停止");
break;
}
sourcecontent += new String(b, 0, bytesRead); // convert to string using bytes
}
}catch(Exception e){
e.printStackTrace();
}
return sourcecontent ;
}
以上為焦點代碼,殘剩部門就是調換,重新組裝java中的String.replace(oldstr,newstr);辦法可以完成,在這就不貼了。源代碼部門詳見附件。
運轉源代碼條件:
c盤創立YQ目次,將附件中"模板.rtf"復制到YQ目次之下,運轉OpreatorRTF.java文件便可,就會在YQ目次下生成文件名如:21時15分19秒_cheney_記載.rtf 的文件。
package com;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
public class OperatorRTF {
public String strToRtf(String content){
char[] digital = "0123456789ABCDEF".toCharArray();
StringBuffer sb = new StringBuffer("");
byte[] bs = content.getBytes();
int bit;
for (int i = 0; i < bs.length; i++) {
bit = (bs[i] & 0x0f0) >> 4;
sb.append("\\'");
sb.append(digital[bit]);
bit = bs[i] & 0x0f;
sb.append(digital[bit]);
}
return sb.toString();
}
public String replaceRTF(String content,String replacecontent,int flag){
String rc = strToRtf(replacecontent);
String target = "";
if(flag==0){
target = content.replace("$timetop$",rc);
}
if(flag==1){
target = content.replace("$info$",rc);
}
if(flag==2){
target = content.replace("$idea$",rc);
}
if(flag==3){
target = content.replace("$advice$",rc);
}
if(flag==4){
target = content.replace("$infosend$",rc);
}
return target;
}
public String getSavePath() {
String path = "C:\\YQ";
File fDirecotry = new File(path);
if (!fDirecotry.exists()) {
fDirecotry.mkdirs();
}
return path;
}
public String ToSBC(String input){
char[] c = input.toCharArray();
for (int i = 0; i < c.length; i++){
if (c[i] == 32){
c[i] = (char) 12288;
continue;
}
if (c[i] < 127){
c[i] = (char) (c[i] + 65248);
}
}
return new String(c);
}
public void rgModel(String username, String content) {
// TODO Auto-generated method stub
Date current=new Date();
SimpleDateFormat sdf=new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String targetname = sdf.format(current).substring(11,13) + "時";
targetname += sdf.format(current).substring(14,16) + "分";
targetname += sdf.format(current).substring(17,19) + "秒";
targetname += "_" + username +"_記載.rtf";
String strpath = getSavePath();
String sourname = strpath+"\\"+"模板.rtf";
String sourcecontent = "";
InputStream ins = null;
try{
ins = new FileInputStream(sourname);
byte[] b = new byte[1024];
if (ins == null) {
System.out.println("源模板文件不存在");
}
int bytesRead = 0;
while (true) {
bytesRead = ins.read(b, 0, 1024); // return final read bytes counts
if(bytesRead == -1) {// end of InputStream
System.out.println("讀取模板文件停止");
break;
}
sourcecontent += new String(b, 0, bytesRead); // convert to string using bytes
}
}catch(Exception e){
e.printStackTrace();
}
String targetcontent = "";
String array[] = content.split("~");
for(int i=0;i<array.length;i++){
if(i==0){
targetcontent = replaceRTF(sourcecontent, array[i], i);
}else{
targetcontent = replaceRTF(targetcontent, array[i], i);
}
}
try {
FileWriter fw = new FileWriter(getSavePath()+"\\" + targetname,true);
PrintWriter out = new PrintWriter(fw);
if(targetcontent.equals("")||targetcontent==""){
out.println(sourcecontent);
}else{
out.println(targetcontent);
}
out.close();
fw.close();
System.out.println(getSavePath()+" 該目次下生成文件" + targetname + " 勝利");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
OperatorRTF oRTF = new OperatorRTF();
String content = "2008年10月12日9時-2008年10月12日6時~我們參照磨練藥品的辦法~我們參照磨練藥品的辦法~我們參照磨練藥品的辦法~我們參照磨練藥品的辦法";
oRTF.rgModel("cheney",content);
}
}
應用POI讀取word文件的表格數據的示例:
<span >package com.poi.world;
import java.io.FileInputStream;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.Paragraph;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.hwpf.usermodel.Table;
import org.apache.poi.hwpf.usermodel.TableCell;
import org.apache.poi.hwpf.usermodel.TableIterator;
import org.apache.poi.hwpf.usermodel.TableRow;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
public class POI_Word{
public static void main(String[] args){
try {
String[] s=new String[20];
FileInputStream in=new FileInputStream("D:\\mayi.doc");
POIFSFileSystem pfs=new POIFSFileSystem(in);
HWPFDocument hwpf=new HWPFDocument(pfs);
Range range =hwpf.getRange();
TableIterator it=new TableIterator(range);
int index=0;
while(it.hasNext()){
Table tb=(Table)it.next();
for(int i=0;i<tb.numRows();i++){
//System.out.println("Numrows :"+tb.numRows());
TableRow tr=tb.getRow(i);
for(int j=0;j<tr.numCells();j++){
//System.out.println("numCells :"+tr.numCells());
// System.out.println("j :"+j);
TableCell td=tr.getCell(j);
for(int k=0;k<td.numParagraphs();k++){
//System.out.println("numParagraphs :"+td.numParagraphs());
Paragraph para=td.getParagraph(k);
s[index]=para.text().trim();
index++;
}
}
}
}
// System.out.println(s.toString());
for(int i=0;i<s.length;i++){
System.out.println(s[i]);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}</span>