《Java读取解决方案》word版_第1页
《Java读取解决方案》word版_第2页
《Java读取解决方案》word版_第3页
《Java读取解决方案》word版_第4页
《Java读取解决方案》word版_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Java读取word文档解决方案java读取word文档时,虽然网上介绍了很多插件poi、java2Word、jacob、itext等等,poi无法读取格式(新的API估计行好像还在处于研发阶段,不太稳定,做项目不太敢用);java2Word、jacob容易报错找不到注册,比较诡异,我曾经在不同的机器上试过,操作方法完全一致,有的机器不报错,有的报错,去他们论坛找高人解决也说不出原因,项目部署用它有点玄;itxt好像写很方便但是我查了好久资料没有见到过关于读的好办法。经过一番选择还是折中点采用rtf最好,毕竟rtf是开源格式,不需要借助任何插件,只需基本IO操作外加编码转换即可。rtf格式文件

2、表面看来和doc没啥区别,都可以用word打开,各种格式都可以设定。- 实现的功能:读取rtf模板内容(格式和文本内容),替换变化部分,形成新的rtf文档。- 实现思路:模板中固定部分手动输入,变化的部分用$info$表示,只需替换$info$即可。 1、采用字节的形式读取rtf模板内容 2、将可变的内容字符串转为rtf编码 3、替换原文中的可变部分,形成新的rtf文档主要程序如下:Java代码/*将制定的字符串转换为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();/*字节形式读取rtf模板内容*/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(读取模板文件结束);break;sourcecontent+=newString(b,0,bytesRead);/converttostringusingbytescatch(Exceptione)e.printStackTrace(); 以上为核心代码,剩余部分就是替换,从新组装jav

5、a中的String.replace(oldstr,newstr);方法可以实现,在这就不贴了。源代码部分详见附件。运行源代码前提:c盘创建YQ目录,将附件中模板.rtf复制到YQ目录之下,运行OpreatorRTF.java文件即可,就会在YQ目录下生成文件名如:21时15分19秒_cheney_记录.rtf 的文件。文件名是在程序中指定的呵呵。由于是由商业软件中拆分出的demo所以只是将自己原来的写的程序分离,合并在一个java文件中,所以有的方法在示例程序中看似多余,没有必要那么麻烦。 对于替换部分需要循环的特例程序,我不好拆分,里面很容易暴露商业软件的东西,所以就不贴了,有需要的话可以加

6、我QQ或者MSN,一起讨论呵呵。附件传了半天也没有传上去,没有办法只有这样搞了呵呵。模板文件附件无法存放,需要的直接联系呵呵。其实直接看以下的java程序部分,就会明白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/*字符串转换为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;/*半角转为全角*/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/*构建生成文

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

12、+=_+username+_记录.rtf;/*字节形式读取模板文件内容,将结果转为字符串*/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(读取模板文件结束);break;sourcecontent+=newString(b,0,bytesRead);/converttostringusingbytescatch(Exceptione)e.printStackTrace();/*修改变化部分*/Stringtargetcontent=;/*拆分之后的数组元素与模板中的标识符对应关系*array0:timetop*array1:info*array2:idea*array3:advice

14、*array4:infosend*/Stringarray=content.split();/*2008年11月27日:更新模板之后时间无需自动填充*/*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);/*结果输出保存到文件*/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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论