《Java讀取解決方案》word版_第1頁
《Java讀取解決方案》word版_第2頁
《Java讀取解決方案》word版_第3頁
《Java讀取解決方案》word版_第4頁
《Java讀取解決方案》word版_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、Java讀取word文檔解決方案java讀取word文檔時(shí),雖然網(wǎng)上介紹了很多插件poi、java2Word、jacob、itext等等,poi無法讀取格式(新的API估計(jì)行好像還在處于研發(fā)階段,不太穩(wěn)定,做項(xiàng)目不太敢用);java2Word、jacob容易報(bào)錯(cuò)找不到注冊,比較詭異,我曾經(jīng)在不同的機(jī)器上試過,操作方法完全一致,有的機(jī)器不報(bào)錯(cuò),有的報(bào)錯(cuò),去他們論壇找高人解決也說不出原因,項(xiàng)目部署用它有點(diǎn)玄;itxt好像寫很方便但是我查了好久資料沒有見到過關(guān)于讀的好辦法。經(jīng)過一番選擇還是折中點(diǎn)采用rtf最好,畢竟rtf是開源格式,不需要借助任何插件,只需基本IO操作外加編碼轉(zhuǎn)換即可。rtf格式文件

2、表面看來和doc沒啥區(qū)別,都可以用word打開,各種格式都可以設(shè)定。- 實(shí)現(xiàn)的功能:讀取rtf模板內(nèi)容(格式和文本內(nèi)容),替換變化部分,形成新的rtf文檔。- 實(shí)現(xiàn)思路:模板中固定部分手動(dòng)輸入,變化的部分用$info$表示,只需替換$info$即可。 1、采用字節(jié)的形式讀取rtf模板內(nèi)容 2、將可變的內(nèi)容字符串轉(zhuǎn)為rtf編碼 3、替換原文中的可變部分,形成新的rtf文檔主要程序如下:Java代碼/*將制定的字符串轉(zhuǎn)換為rtf編碼*/publicStringbin2hex(Stringbin)chardigital=0123456789ABCDEF.toCharArray();StringBuf

3、fersb=newStringBuffer();bytebs=bin.getBytes();intbit;for(inti=0;i4;sb.append();sb.append(digitalbit);bit=bsi&0 x0f;sb.append(digitalbit);returnsb.toString();/*字節(jié)形式讀取rtf模板內(nèi)容*/publicStringreadByteRtf(InputStreamins,Stringpath)Stringsourcecontent=;tryins=newFileInputStream(path);byteb=newbyte1024;if(in

4、s=null)ntln(源模板文件不存在);intbytesRead=0;while(true)bytesRead=ins.read(b,0,1024);/returnfinalreadbytescountsif(bytesRead=-1)/endofInputStreamSystem.out.println(讀取模板文件結(jié)束);break;sourcecontent+=newString(b,0,bytesRead);/converttostringusingbytescatch(Exceptione)e.printStackTrace(); 以上為核心代碼,剩余部分就是替換,從新組裝jav

5、a中的String.replace(oldstr,newstr);方法可以實(shí)現(xiàn),在這就不貼了。源代碼部分詳見附件。運(yùn)行源代碼前提:c盤創(chuàng)建YQ目錄,將附件中模板.rtf復(fù)制到Y(jié)Q目錄之下,運(yùn)行OpreatorRTF.java文件即可,就會(huì)在YQ目錄下生成文件名如:21時(shí)15分19秒_cheney_記錄.rtf 的文件。文件名是在程序中指定的呵呵。由于是由商業(yè)軟件中拆分出的demo所以只是將自己原來的寫的程序分離,合并在一個(gè)java文件中,所以有的方法在示例程序中看似多余,沒有必要那么麻煩。 對于替換部分需要循環(huán)的特例程序,我不好拆分,里面很容易暴露商業(yè)軟件的東西,所以就不貼了,有需要的話可以加

6、我QQ或者M(jìn)SN,一起討論呵呵。附件傳了半天也沒有傳上去,沒有辦法只有這樣搞了呵呵。模板文件附件無法存放,需要的直接聯(lián)系呵呵。其實(shí)直接看以下的java程序部分,就會(huì)明白Java代碼/*以下部分是java源代碼*/packagecom;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileWriter;importjava.io.IOException;importjava.io.InputStream;importjava.io.PrintWriter;importjava.text.SimpleDateForma

7、t;importjava.util.Date;publicclassOperatorRTF/*字符串轉(zhuǎn)換為rtf編碼*paramcontent*return*/publicStringstrToRtf(Stringcontent)chardigital=0123456789ABCDEF.toCharArray();StringBuffersb=newStringBuffer();bytebs=content.getBytes();intbit;for(inti=0;i4;sb.append();sb.append(digitalbit);bit=bsi&0 x0f;sb.append(digi

8、talbit);returnsb.toString();/*替換文檔的可變部分*paramcontent*paramreplacecontent*paramflag*return*/publicStringreplaceRTF(Stringcontent,Stringreplacecontent,intflag)Stringrc=strToRtf(replacecontent);Stringtarget=;/*if(flag=0)target=content.replace($time$,rc);*/if(flag=0)target=content.replace($timetop$,rc);

9、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);returntarget;/*獲取文件路徑*paramflag*return*/publicStringgetSavePath()Stringpath=C:YQ;FilefDirecotry=newFile(path);if(!fDir

10、ecotry.exists()fDirecotry.mkdirs();returnpath;/*半角轉(zhuǎn)為全角*/publicStringToSBC(Stringinput)charc=input.toCharArray();for(inti=0;ic.length;i+)if(ci=32)ci=(char)12288;continue;if(ci127)ci=(char)(ci+65248);returnnewString(c);publicvoidrgModel(Stringusername,Stringcontent)/TODOAuto-generatedmethodstub/*構(gòu)建生成文

11、件名targetname:12時(shí)10分23秒_username_記錄.rtf*/Datecurrent=newDate();SimpleDateFormatsdf=newjava.text.SimpleDateFormat(yyyy-MM-ddHH:mm:ss);Stringtargetname=sdf.format(current).substring(11,13)+時(shí);targetname+=sdf.format(current).substring(14,16)+分;targetname+=sdf.format(current).substring(17,19)+秒;targetname

12、+=_+username+_記錄.rtf;/*字節(jié)形式讀取模板文件內(nèi)容,將結(jié)果轉(zhuǎn)為字符串*/Stringstrpath=getSavePath();Stringsourname=strpath+模板.rtf;Stringsourcecontent=;InputStreamins=null;tryins=newFileInputStream(sourname);byteb=newbyte1024;if(ins=null)System.out.println(源模板文件不存在);intbytesRead=0;while(true)bytesRead=ins.read(b,0,1024);/retu

13、rnfinalreadbytescountsif(bytesRead=-1)/endofInputStreamSystem.out.println(讀取模板文件結(jié)束);break;sourcecontent+=newString(b,0,bytesRead);/converttostringusingbytescatch(Exceptione)e.printStackTrace();/*修改變化部分*/Stringtargetcontent=;/*拆分之后的數(shù)組元素與模板中的標(biāo)識符對應(yīng)關(guān)系*array0:timetop*array1:info*array2:idea*array3:advice

14、*array4:infosend*/Stringarray=content.split();/*2008年11月27日:更新模板之后時(shí)間無需自動(dòng)填充*/*Stringnowtime=sdf.format(current).substring(0,4)+年;nowtime+=sdf.format(current).substring(5,7)+月;nowtime+=sdf.format(current).substring(8,10)+日;*/for(inti=0;iarray.length;i+)/*if(i=0)targetcontent=documentDoc.replaceRTF(sou

15、rcecontent,nowtime,i);elsetargetcontent=documentDoc.replaceRTF(targetcontent,arrayi-1,i);*/if(i=0)targetcontent=replaceRTF(sourcecontent,arrayi,i);elsetargetcontent=replaceRTF(targetcontent,arrayi,i);/*結(jié)果輸出保存到文件*/tryFileWriterfw=newFileWriter(getSavePath()+targetname,true);PrintWriterout=newPrintWriter(fw);if(targetcontent.equals()|targetcontent=)out.println(sourcecontent);elseout.println(targetcontent);out.close();fw.close();System.out.println(getSavePath()+該目錄下生成文件+targetname+成功);catch(IOExceptione)/TODOAuto-generatedcatchblocke.printSt

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論