




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、Good is good, but better carries it.精益求精,善益求善。Java讀取解決方案-HYPERLINK/blog/468943Java讀取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好像寫很方便但是我查了好久資
2、料沒有見到過關(guān)于讀的好辦法。經(jīng)過一番選擇還是折中點(diǎn)采用rtf最好,畢竟rtf是開源格式,不需要借助任何插件,只需基本IO操作外加編碼轉(zhuǎn)換即可。rtf格式文件表面看來和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編碼*/publicStr
3、ingbin2hex(Stringbin)chardigital=0123456789ABCDEF.toCharArray();StringBuffersb=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)Str
4、ingsourcecontent=;tryins=newFileInputStream(path);byteb=newbyte1024;if(ins=null)System.out.println(源模板文件不存在);intbytesRead=0;while(true)bytesRead=ins.read(b,0,1024);/returnfinalreadbytescountsif(bytesRead=-1)/endofInputStreamSystem.out.println(讀取模板文件結(jié)束);break;sourcecontent+=newString(b,0,bytesRead);/
5、converttostringusingbytescatch(Exceptione)e.printStackTrace();以上為核心代碼,剩余部分就是替換,從新組裝java中的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è)ja
6、va文件中,所以有的方法在示例程序中看似多余,沒有必要那么麻煩。對于替換部分需要循環(huán)的特例程序,我不好拆分,里面很容易暴露商業(yè)軟件的東西,所以就不貼了,有需要的話可以加我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
7、;importjava.io.InputStream;importjava.io.PrintWriter;importjava.text.SimpleDateFormat;importjava.util.Date;publicclassOperatorRTF/*字符串轉(zhuǎn)換為rtf編碼*paramcontent*return*/publicStringstrToRtf(Stringcontent)chardigital=0123456789ABCDEF.toCharArray();StringBuffersb=newStringBuffer();bytebs=content.getBytes()
8、;intbit;for(inti=0;i4;sb.append();sb.append(digitalbit);bit=bsi&0 x0f;sb.append(digitalbit);returnsb.toString();/*替換文檔的可變部分*paramcontent*paramreplacecontent*paramflag*return*/publicStringreplaceRTF(Stringcontent,Stringreplacecontent,intflag)Stringrc=strToRtf(replacecontent);Stringtarget=;/*if(flag=0
9、)target=content.replace($time$,rc);*/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);returntarget;/*獲取文件路徑*paramflag*re
10、turn*/publicStringgetSavePath()Stringpath=C:YQ;FilefDirecotry=newFile(path);if(!fDirecotry.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)
11、;publicvoidrgModel(Stringusername,Stringcontent)/TODOAuto-generatedmethodstub/*構(gòu)建生成文件名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(curre
12、nt).substring(14,16)+分;targetname+=sdf.format(current).substring(17,19)+秒;targetname+=_+username+_記錄.rtf;/*字節(jié)形式讀取模板文件內(nèi)容,將結(jié)果轉(zhuǎn)為字符串*/Stringstrpath=getSavePath();Stringsourname=strpath+模板.rtf;Stringsourcecontent=;InputStreamins=null;tryins=newFileInputStream(sourname);byteb=newbyte1024;if(ins=null)Syste
13、m.out.println(源模板文件不存在);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();/*修改變化部分*/Stringtargetc
14、ontent=;/*拆分之后的數(shù)組元素與模板中的標(biāo)識(shí)符對應(yīng)關(guān)系*array0:timetop*array1:info*array2:idea*array3:advice*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,1
15、0)+日;*/for(inti=0;iarray.length;i+)/*if(i=0)targetcontent=documentDoc.replaceRTF(sourcecontent,nowtime,i);elsetargetcontent=documentDoc.replaceRTF(targetcontent,arrayi-1,i);*/if(i=0)targetcontent=replaceRTF(sourcecontent,arrayi,i);elsetargetcontent=replaceRTF(targetcontent,arrayi,i);/*結(jié)果輸出保存到文件*/try
16、FileWriterfw=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.pri
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 上海售電合同范本
- 兄弟爭房子合同范本
- 農(nóng)村魚塘承包合同范本
- 合作協(xié)議合同范本4人
- 買賣見證合同范本
- 冶煉設(shè)備租賃合同范本
- 代理英國租房合同范本
- 出租車成本監(jiān)審合同范本
- 醫(yī)療設(shè)備轉(zhuǎn)租合同范本
- 含租房屋銷售合同范例
- 2025年湖南環(huán)境生物職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫一套
- 2025年黑龍江農(nóng)業(yè)經(jīng)濟(jì)職業(yè)學(xué)院單招職業(yè)傾向性測試題庫參考答案
- 2025年廣東省深圳法院招聘書記員招聘144人歷年高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
- 變電站電網(wǎng)側(cè)儲(chǔ)能項(xiàng)目可行性研究報(bào)告
- 新版統(tǒng)編版一年級道德與法治下冊全冊教案(完整版)教學(xué)設(shè)計(jì)含教學(xué)反思
- 4.2 同學(xué)相伴 第二課時(shí) 課件 2024-2025學(xué)年三年級下冊道德與法治 統(tǒng)編版
- 2025年春季學(xué)期學(xué)校德育工作計(jì)劃安排表(完整版)
- 2025年全球及中國調(diào)頻儲(chǔ)能行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2024年江西青年職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測試歷年參考題庫含答案解析
- 2025年春新冀教版英語三年級下冊課件 2L2
- 2025年度會(huì)計(jì)人員繼續(xù)教育會(huì)計(jì)法律法規(guī)答題活動(dòng)測試100題答案
評論
0/150
提交評論