java读取word文件的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java读取word文件的问题相关的知识,希望对你有一定的参考价值。
org.textmining.text.extraction.FastSavedException: Fast-saved files are unsupported at this time
at org.textmining.text.extraction.WordExtractor.extractText(WordExtractor.java:39)
at com.yloa.action.ResumAction.readDoc(ResumAction.java:472)
at com.yloa.action.ResumAction.adOrEdresume(ResumAction.java:298)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:440)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:279)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:163)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:249)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
还有点不让贴了,网上查了点,主要是读不出word文件的格式,可是我有的word文件可以读出来,有的就报这个错,怎么解决,求助啊
逼我把夹包源码给改了,貌似可以读出来了,不知道有没有什么遗留问题,期待高手给予正确的解决方法
public static String readDoc(String doc) throws Exception
// 创建输入流读取doc文件
FileInputStream in = new FileInputStream(new File(doc));
WordExtractor extractor = null;
String text = null;
// 创建WordExtractor
extractor = new WordExtractor();
// 对doc文件进行提取
text = extractor.extractText(in);
return text;
这是读取的代码。运行到 text = extractor.extractText(in);对文件进行提取时就报上边的异常;我查出是夹包里抛出的一个异常,不知道为什么,知道解释下
关键是没运行完就报异常啊,还没到关闭输入流释放资源那呢;是夹包里的异常啊,明白没,我就是想知道这个异常是干嘛的,我把它注销了,没出问题,也可以读取了。。。
请关闭输入流,释放资源,谢谢。调用close()方法。
其他貌似没有发现什么问题。
public static String run(String filename)
WordExtractor extractor=null;
String text=null;
try
FileInputStream in = new FileInputStream (filename);
extractor = new WordExtractor();
text=extractor.extractText(in);
catch(Exception ex)
//log
return null;
return text;
public static void main(String[] args)
try
FileOutputStream out=new FileOutputStream("result.txt");
out.write(WordProcess.run(args[0]).getBytes());
out.flush();
out.close();
catch(Exception ex)
System.out.println(ex.toString());
看看这个。模范这样写,试试看。这个代码我试过,没问题,如果这样写还是有问题,那就不是代码的问题了。追问
我用你这个也读不出来啊,没看懂你这个怎么运行的,读取文件是哪段啊,你写明白点啊
追答ublic static String run(String filename)
WordExtractor extractor=null;
String text=null;
try
FileInputStream in = new FileInputStream (filename);
extractor = new WordExtractor();
text=extractor.extractText(in);
catch(Exception ex)
//log
return null;
return text;
这个方法我就不说了,跟你的几乎一模一样
public static void main(String[] args)
try
FileOutputStream out=new FileOutputStream("result.txt");//这里是输出流,将你从doc文档中读取到的内容写成一个result.txt文件
out.write(WordProcess.run(args[0]).getBytes());//args[0]).getBytes()是dos运行java命令的main方法时的一个参数你可以直接替换成你的file路径
out.flush();//把输出流刷出去成为文件
out.close();//关闭输出流
catch(Exception ex)
System.out.println(ex.toString());
如果还是不懂。。那我也帮不了你了
args[0]).getBytes()就是这看不懂,怎么半个括号啊,替换成路径就出错。。。
args[0]还是这是路径啊,把这替换了就空指针。。。你确定运行过了??
public static void main(String[] args)
try
FileOutputStream out=new FileOutputStream("result.txt");//这里是输出流,将你从doc文档中读取到的内容写成一个result.txt文件
out.write(WordProcess.run(文件路径).getBytes());
out.flush();//把输出流刷出去成为文件
out.close();//关闭输出流
catch(Exception ex)
System.out.println(ex.toString());
Java实现word文档在线预览,读取office文件
想要实现word或者其他office文件的在线预览,大部分都是用的两种方式,一种是使用openoffice转换之后再通过其他插件预览,还有一种方式就是通过POI读取内容然后预览。
一、使用openoffice方式实现word预览
主要思路是:
1.通过第三方工具openoffice,将word、excel、ppt、txt等文件转换为pdf文件
2.通过swfTools将pdf文件转换成swf格式的文件
3.通过FlexPaper文档组件在页面上进行展示
我使用的工具版本:
openof:3.4.1
swfTools:1007
FlexPaper:这个关系不大,我随便下的一个。推荐使用1.5.1
JODConverter:需要jar包,如果是maven管理直接引用就可以
操作步骤:
1.office准备
下载openoffice:
http://www.openoffice.org/download/index.html
从过往文件,其他语言中找到中文版3.4.1的版本
下载后,解压缩,安装
然后找到安装目录下的program 文件夹
在目录下运行
soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard
如果运行失败,可能会有提示,那就加上 .\\ 在运行试一下
这样openoffice的服务就开启了。
2.
将flexpaper文件中的js文件夹(包含了flexpaper_flash_debug.js,flexpaper_flash.js,jquery.js,这三个js文件主要是预览swf文件的插件)拷贝至网站根目录;将FlexPaperViewer.swf拷贝至网站根目录下(该文件主要是用在网页中播放swf文件的播放器)
项目结构:
页面代码:
fileUpload.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>文档在线预览系统</title> <style> body {margin-top:100px;background:#fff;font-family: Verdana, Tahoma;} a {color:#CE4614;} #msg-box {color: #CE4614; font-size:0.9em;text-align:center;} #msg-box .logo {border-bottom:5px solid #ECE5D9;margin-bottom:20px;padding-bottom:10px;} #msg-box .title {font-size:1.4em;font-weight:bold;margin:0 0 30px 0;} #msg-box .nav {margin-top:20px;} </style> </head> <body> <div id="msg-box"> <form name="form1" method="post" enctype="multipart/form-data" action="docUploadConvertAction.jsp"> <div class="title"> 请上传要处理的文件,过程可能需要几分钟,请稍候片刻。 </div> <p> <input name="file1" type="file"> </p> <p> <input type="submit" name="Submit" value="上传"> </p> </form > </div> </body> </html>
docUploadConvertAction.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@page import="java.io.*"%> <%@page import="java.util.Enumeration"%> <%@page import="com.oreilly.servlet.MultipartRequest"%> <%@page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%> <%@page import="filetest.DocConverter"%> <% //文件上传采用cos组件上传,可更换为commons-fileupload上传,文件上传后,保存在upload文件夹 //获取文件上传路径 String saveDirectory =application.getRealPath("/")+"upload"; //打印上传路径信息 System.out.println(saveDirectory); //每个文件最大50m int maxPostSize = 50 * 1024 * 1024 ; //采用cos缺省的命名策略,重名后加1,2,3...如果不加dfp重名将覆盖 DefaultFileRenamePolicy dfp = new DefaultFileRenamePolicy(); //response的编码为"UTF-8",同时采用缺省的文件名冲突解决策略,实现上传,如果不加dfp重名将覆盖 MultipartRequest multi = new MultipartRequest(request, saveDirectory, maxPostSize,"UTF-8",dfp); //MultipartRequest multi = new MultipartRequest(request, saveDirectory, maxPostSize,"UTF-8"); //输出反馈信息 Enumeration files = multi.getFileNames(); while (files.hasMoreElements()) { System.err.println("ccc"); String name = (String)files.nextElement(); File f = multi.getFile(name); if(f!=null){ String fileName = multi.getFilesystemName(name); //获取上传文件的扩展名 String extName=fileName.substring(fileName.lastIndexOf(".")+1); //文件全路径 String lastFileName= saveDirectory+"\\\\" + fileName; //获取需要转换的文件名,将路径名中的\'\\\'替换为\'/\' String converfilename = saveDirectory.replaceAll("\\\\\\\\", "/")+"/"+fileName; System.out.println(converfilename); //调用转换类DocConverter,并将需要转换的文件传递给该类的构造方法 DocConverter d = new DocConverter(converfilename); //调用conver方法开始转换,先执行doc2pdf()将office文件转换为pdf;再执行pdf2swf()将pdf转换为swf; d.conver(); //调用getswfPath()方法,打印转换后的swf文件路径 System.out.println(d.getswfPath()); //生成swf相对路径,以便传递给flexpaper播放器 String swfpath = "upload"+d.getswfPath().substring(d.getswfPath().lastIndexOf("/")); System.out.println(swfpath); //将相对路径放入sessio中保存 session.setAttribute("swfpath", swfpath); out.println("上传的文件:"+lastFileName); out.println("文件类型"+extName); out.println("<hr>"); } } %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <style> body {margin-top:100px;background:#fff;font-family: Verdana, Tahoma;} a {color:#CE4614;} #msg-box {color: #CE4614; font-size:0.9em;text-align:center;} #msg-box .logo {border-bottom:5px solid #ECE5D9;margin-bottom:20px;padding-bottom:10px;} #msg-box .title {font-size:1.4em;font-weight:bold;margin:0 0 30px 0;} #msg-box .nav {margin-top:20px;} </style> </head> <body> <div> <form name="viewForm" id="form_swf" action="documentView.jsp" method="POST"> <input type=\'submit\' value=\'预览\' class=\'BUTTON SUBMIT\'/> </form> </div> </body> </html>
documentView.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% String swfFilePath=session.getAttribute("swfpath").toString(); %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript" src="js/flexpaper_flash.js"></script> <script type="text/javascript" src="js/flexpaper_flash_debug.js"></script> <style type="text/css" media="screen"> html, body { height:100%; } body { margin:0; padding:0; overflow:auto; } #flashContent { display:none; } </style> <title>文档在线预览系统</title> </head> <body> <div style="position:absolute;left:50px;top:10px;"> <a id="viewerPlaceHolder" style="width:820px;height:650px;display:block"></a> <script type="text/javascript"> var fp = new FlexPaperViewer( \'FlexPaperViewer\', \'viewerPlaceHolder\', { config : { SwfFile : escape(\'<%=swfFilePath%>\'), Scale : 0.6, ZoomTransition : \'easeOut\', ZoomTime : 0.5, ZoomInterval : 0.2, FitPageOnLoad : true, FitWidthOnLoad : false, FullScreenAsMaxWindow : false, ProgressiveLoading : false, MinZoomSize : 0.2, MaxZoomSize : 5, SearchMatchAll : false, InitViewMode : \'SinglePage\', ViewModeToolsVisible : true, ZoomTool以上是关于java读取word文件的问题的主要内容,如果未能解决你的问题,请参考以下文章