【问题标题】:FileInputStream and FileNotFound ExceptionFileInputStream 和 FileNotFoundException
【发布时间】:2012-03-13 09:41:55
【问题描述】:

我正在尝试使用以下 java 代码在相对路径中检索 jrxml 文件:

 String jasperFileName = "/web/WEB-INF/reports/MemberOrderListReport.jrxml";
 File report = new File(jasperFileName);
 FileInputStream fis = new FileInputStream(report);

但是,很可能我没有成功定义相对路径并在执行期间得到 java.io.FileNotFoundException: 错误。

由于我在 Java I/O 操作方面没有那么丰富的经验,所以我没有解决我的问题。欢迎任何帮助或想法。

【问题讨论】:

  • 这是在什么情况下发生的?您在哪个包/文件夹中?
  • 您不能以这种方式处理资源。您不知道在 web 服务器部署后该文件的确切位置。

标签: java io jasper-reports


【解决方案1】:

您试图将 jrxml 文件视为文件系统上的一个对象,但这不适用于 Web 应用程序。

您不知道将如何或在何处部署您的应用程序,因此您不能将File 指向它。

相反,您想使用ServletContext 中的getResourceAsStream。比如:

String resourceName = "/WEB-INF/reports/MemberOrderListReport.jrxml"
InputStream is = getServletContext().getResourceAsStream(resourceName);

是你所追求的。

【讨论】:

  • 亲爱的蒂姆,我又不是新手了。你能告诉我要导入哪个类来调用 getServletContext() 吗?您真诚的...
  • 顺便说一句,我正在尝试在 JSF 中实现 :)
  • 对不起,我不是 JSF 专家。但据我所知,你想做ServletContext servletContext = (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext();
【解决方案2】:

您应该将“MemberOrderListReport.jrxml”放在类路径中,例如将其包含在 web-inf\lib 中的 jar 中或作为 web-inf\classes 中的文件。 您可以使用以下代码读取文件:

 InputStream is=YourClass.class.getClassLoader().getResourceAsStream("MemberOrderListReport.jrxml");

【讨论】:

  • 亲爱的 Samarth,我不想读文件,只想检索。
  • 不确定如何区分读取和检索。要检索,您必须阅读。 getResourceAsStream 返回一个 InputStream,这是您想要实现的。更新了答案以反映这一点。
【解决方案3】:
String jasperFileName = "/web/WEB-INF/reports/MemberOrderListReport.jrxml";

简单。您的计算机上没有 /web/WEB-INF/reports/MemoberOrderListReport.jrxml 文件。

您显然是在 web-app 环境中执行,并期望系统在 web-app 容器的上下文中自动解决该问题。它没有。这就是getRealPath() 和朋友们的目的。

【讨论】:

  • 为了找到路径我应该 concat getRealPath() plus jasperFileName??
  • @FarukPostacioglu 请参阅 Javadoc。您应该使用文件名作为参数来调用它。您可能还需要修剪 /web。
【解决方案4】:

检查您的相对基本路径是否是您认为的:

文件 f = new File("test.txt"); System.out.println(f.getAbsoluteFile());

【讨论】:

    【解决方案5】:

    这种问题我见过很多次了,答案总是一样的……

    问题是文件路径不是你想象的那样。要弄清楚,只需在创建 File 后添加此行:

    System.out.println(report.getAbsolutePath());
    

    查看输出,您会立即发现问题所在。

    【讨论】:

    • 亲爱的波西米亚人,感谢您的建议。在提交问题之前我已经知道问题。它与错误定义报告的绝对路径有关。但是,我希望在将文件提交到服务器时动态生成它,我不想在服务器中定义绝对路径,而是相对路径。谢谢...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-19
    • 2019-01-13
    • 1970-01-01
    相关资源
    最近更新 更多