关于异常的处理

关于异常的处理

07版导入的话会出现OfficeXmlFileException异常,我将07版的解析方法封装成一个函数放在异常之下,应该会执行其下的代码,正常导入07版,为什么我开断点调试,却发现我放入07版的Word却出现的Exception的异常,执行的是Exception下的代码,,,难道,Exception捕获能力更强吗?

http://img1.sycdn.imooc.com//climg/5c6ac07600017d8009660660.jpg

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

5回答
好帮手慕阿满 2019-02-19 15:34:14

试了同学的代码,没有问题。建议同学在catch(Exception e)的后边使用e.printStackTrace();打印输出一下异常信息,看报什么异常。另外问一下同学导入的是老师提供的模板吗?建议同学反馈一下如上信息。祝:学习愉快~

  • 提问者 MySweeties #1
    谢谢了,我已经找到解决办法了!!!
    2019-02-19 15:58:00
提问者 MySweeties 2019-02-19 14:41:14
	public ImportWordResultDto imp(ImportWordParamDto dto) {
		ImportWordResultDto result = new ImportWordResultDto();
		result.setTitle(dto.getTitle());
		HWPFDocument doc = null;
		try {
			doc = new HWPFDocument(dto.getWord().getInputStream());
			result.setContent(doc.getDocumentText().replace("\r", "<br/>"));
			return result;
		} catch (OfficeXmlFileException oe) {
			result.setMsg("这是一个07版的Word");
			//return ImportWordResultDto(dto, result);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			System.out.println("这可能不是一个Word");
			return result;
		} finally {
			if(null != doc) {
				try {
					doc.close();
					return result;
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
		
		XWPFDocument docx = null;
		try {
			docx = new XWPFDocument(dto.getWord().getInputStream());
			List<XWPFParagraph> paragraphList = docx.getParagraphs();
			StringBuilder content = new StringBuilder();
			for(int i = 0; i < paragraphList.size(); i ++) {
				if(i != 0) {
					content.append("<br/>");
				}
				content.append(paragraphList.get(i).getText());
			}
			result.setContent(content.toString());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if(null != docx) {
				try {
					docx.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
		
		return result;
	}
	
	/*
	public ImportWordResultDto imp07(ImportWordParamDto dto, ImportWordResultDto result) {
		XWPFDocument docx = null;
		try {
			docx = new XWPFDocument(dto.getWord().getInputStream());
			List<XWPFParagraph> paragraphList = docx.getParagraphs();
			StringBuilder content = new StringBuilder();
			for(int i = 0; i < paragraphList.size(); i ++) {
				if(i != 0) {
					content.append("<br/>");
				}
				content.append(paragraphList.get(i).getText());
			}
			result.setContent(content.toString());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if(null != docx) {
				try {
					docx.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
		return result;
	}
	*/

以上是WordService的代码内容?请老师解答,运行导入07版后,得到的是

http://img1.sycdn.imooc.com//climg/5c6ba5060001ef2407290662.jpg

好帮手慕阿满 2019-02-19 14:23:25

同学你好,这里应该是按照顺序执行的,先执行catch (OfficeXmlFileException oe),如果不满足这个条件,继续执行向下执行。没有说Exception的优先级高就先执行。建议同学在在catch(Exception e)的后边使用e.printStackTrace();打印输出一下报什么错误。另外建议导入老师提供的模板试试。如果还是不行,建议同学将WordService的代码贴上来,并把报错信息贴一下。祝:学习愉快~

  • 提问者 MySweeties #1
    代码已经上传到 我要回答 的区域了,麻烦老师瞧下
    2019-02-19 14:42:22
好帮手慕阿满 2019-02-19 11:34:14

同学你好,这里应该是没有抛出OfficeXmlFileException异常,而是抛出了其他的异常。问一下同学导入03版的word能正常显示吗?建议同学导入老师提供的模板再试试。模板在资料的项目静态资源中。祝:学习愉快~

  • 提问者 MySweeties #1
    03版的正常,但是07版的就报异常了,视频结尾不是讲了那个小bug吗,然后做了没行,它就直接输出了“这可能不是一个word”的这句话!之后我就想到视频提到过07版导入时会发生OfficeXmlFileException的异常,我就寻思着,定义一个方法,在这个异常底下去调用,然后返回result,还是报错了,它压根儿就没走这个异常,而是直接走的Exception的异常!所以就想问Exception的异常是不是优先级高些,毕竟我两个异常都放了return语句,但是就是没走OfficeXmlFileException!如果向视频之前中那样,改成只有IOException的话,导入07版的,又会报这个OfficeXmlFileException的异常。。。。总之整的很懵逼。。。。。
    2019-02-19 12:17:11
提问者 MySweeties 2019-02-18 22:36:57

按照视频中所写的,在OfficeXmlFileException的异常下不加return,会继续执行07版解析的代码,但是我实际调试中,07版的总是失败,它直接被Exception捕获了,根本没往下执行了

http://img1.sycdn.imooc.com//climg/5c6ac30300011c7c09450736.jpg

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
从网页搭建入门Java Web2018版
  • 参与学习           人
  • 提交作业       1088    份
  • 解答问题       10205    个

如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师