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

下載本文檔

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

文檔簡(jiǎn)介

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

2、件表面看來(lái)和 doc沒(méi)啥區(qū)別,都可以用 word打開(kāi),各種格式 都可以設(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代碼1./*2.*將制定的字符串轉(zhuǎn)換為rtf編碼3.*/4.public String bin2hex(String bin) 5.char digital =0123456789ABCDEF .toCharA

3、rray()6.StringBuffer sb =new StringBuffer();7.byte bs = bin.getBytes();8.int bit;9.for ( int i =0; i 4;11.sb.append();12.sb.append(digitalbit);13.bit = bsi &0x0f ;14.sb.append(digitalbit);15. 16. return sb.toString();17. 18.18. /*19. *字節(jié)形式讀取rtf模板內(nèi)容20. */21. public String readByteRtf(lnputStream ins,

4、 String path)22. String sourcecontent =;23. try 24. ins =new FilelnputStream(path);25. byte b = new byte 1024;27.if (ins =null ) 28.System.out.println(源模板文件不存在”);29.30.int bytesRead =0;31.while ( true ) 32.bytesRead = ins.read(b,0,1024 );/ return final read bytes counts33.if (bytesRead =-1) / end of

5、 InputStream34.System.out.println(讀取模板文件結(jié)束”);35.break ;36.37.sourcecontent +=new String(b,0, bytesRead);/ convert to string using bytes38.39. catch (Exception e)40.e.printStackTrace();41.42.以上為核心代碼,剩余部分就是替換,從新組裝java中的String.replace(oldstr,newstr);方法可以實(shí)現(xiàn), 在這就不貼了。源代碼部分詳見(jiàn)附件。運(yùn)行源代碼前提:c盤創(chuàng)建YQ目錄,將附件中模板.rtf復(fù)

6、制到Y(jié)Q目錄之下,運(yùn)行OpreatorRTF.java 文件即可,就會(huì)在YQ 目錄下生成文件名如:21時(shí)15分19秒_cheney_記錄.rtf的文件。文件名是在程序中指定的呵呵。 由于是由商業(yè)軟件中拆分出的demo所以只是將自己原來(lái)的寫的程序分離,合并在一個(gè)java文件中,所以有的方法在示例程序中看似多余,沒(méi)有必要那么麻煩。對(duì)于替換部分需要循環(huán)的特例程序,我不好拆分,里面很容易暴露商業(yè)軟件的東西,所以就不貼了,有需要的話可以加我 QQ或者M(jìn)SN,一起討論呵呵。附件傳了半天也沒(méi)有傳上去,沒(méi)有辦法只有這樣搞了呵呵。模板文件附件無(wú)法存放,需要的直接聯(lián)系呵呵。其實(shí)直接看以下的java程序部分,就會(huì)明

7、白Java代碼1.2./*3.*以下部分是java源代碼4.*/5.6.package;com;7.8.importjava.io.File;9.importjava.io.FileInputStream;10.importjava.io.FileWriter;11.importjava.io0 Exception;12.importjava.ionputStream;13.importjava.io.PrintWriter;14.import java.text.SimpleDateFormat;15.import java.util.Date;16.17.public class Oper

8、atorRTF 18.19./*20.*字符串轉(zhuǎn)換為rtf編碼21.* param content22.* return23.*/24.public String strToRtf(String content)25.char digital =0123456789ABCDEF .toCharArray();26.StringBuffer sb =new StringBuffer();27.byte bs = content.getBytes();28.int bit;29.for ( int i =0; i 4;31.sb.append();32.sb.append(digitalbit);

9、33.bit = bsi &0x0f ;34.sb.append(digitalbit);35.36.return sb.toString();37.38.39./*40.*替換文檔的可變部分41.* param content42.* param replacecontent43.* param flag44.* return45.*/46.public String replaceRTF(String content,String replacecontent,int flag)47.String rc = strToRtf(replacecontent);48.String target

10、 =;49./*if(flag=O)50.target = content.replace($time$,rc);51.*/52.if (flag= 0)53.target = content.replace($timetop$ ,rc);54.55.if (flag= 1)56.target = content.replace($info$ ,rc);6.97

11、.98.99.100.if (flag= 2) target = content.replace( if (flag= 3) target = content.replace( if (flag= 4) target = content.replace( return target;* 獲取文件路徑* param flag* return*/public String getSavePath() String path =C:YQ$idea$ ,rc);$advice$ ,rc);$infosend$ ,rc);File fDirecotry =new File(path);if (!fDir

12、ecotry.exists() fDirecotry.mkdirs();return path;*半角轉(zhuǎn)為全角*/public String ToSBC(String input)char c=input.toCharArray();for ( int i =0; i c.length; i+)if(ci =32)ci=(char) 12288 ;continue ;if(ci 127)ci=(char ) (ci +65248);returnnew String(c);101.102.103.public void rgModel(String username, String conten

13、t) 104./ TODO Auto-generated method stub105./*構(gòu)建生成文件名 targetname:12時(shí)10分23秒_username_ 1己錄.rtf */106.Date current=new Date();107.SimpleDateFormat sdf=new java.text.SimpleDateFormat(yyyy-MM-dd HH:mm:ss);108.String targetname = sdf.format(current).substring(11, 13) +時(shí);109.targetname += sdf.format(curren

14、t).substring(14,16) +分;110.targetname += sdf.format(current).substring(17,19) +秒;111.targetname +=_ + username +_ 記錄.rtf ;112.113./*字節(jié)形式讀取模板文件內(nèi)容,將結(jié)果轉(zhuǎn)為字符串*/114.String strpath = getSavePath();115.String sourname = strpath+模板.rtf;116.String sourcecontent =117.InputStream ins =null ;118.try 119.ins =new

15、 FileInputStream(sourname);120.byte b =new byte 1024 ;121.if (ins =null ) 122.System.out.println(源模板文件不存在);123.124.int bytesRead =0;125.while ( true ) 126.bytesRead = ins.read(b,0,1024);/ return final read bytes counts127.if (bytesRead =-1) / end of InputStream128.System.out.println(讀取模板文件結(jié)束);129.br

16、eak ;130.131.sourcecontent +=new String(b,0, bytesRead);/ convert to string using bytes132.133.catch (Exception e)134.e.printStackTrace();135.136./*修改變化部分*/137.String targetcontent =138./*139.*拆分之后的數(shù)組元素與模板中的標(biāo)識(shí)符對(duì)應(yīng)關(guān)系140.* array0:timetop141.* array1:info142.* array2:idea143.* array3:advice144.* array4:

17、infosend145.*/146.String array = content.split();147./*148.* 2008年11月27日:更新模板之后時(shí)間無(wú)需自動(dòng)填充149.*/150./*String nowtime = sdf.format(current).substring(0,4) + 年;151.nowtime += sdf.format(current).substring(5,7) + 月;152.nowtime += sdf.format(current).substring(8,10) + 日;*7153.for (int i= 0;iarray.length;i+

18、)154./*if(i=0)155.targetcontent = documentDoc.replaceRTF(sourcecontent,nowtime,i);156.else157.targetcontent = documentDoc.replaceRTF(targetcontent,array【i-1,i);158.*/159.if (i= 0)160.targetcontent = replaceRTF(sourcecontent, arrayi, i);161.else 162.targetcontent = replaceRTF(targetcontent, arrayi, i);66./*結(jié)果輸岀保存到文件*/167.try 168.FileWriter fw =new FileWriter(getSavePath()+ targetname,true )169.PrintWriter out =new PrintWriter(fw);170.if (targetcontent.equals( )|targetcontent=

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論