提问者:小点点

无法通过JRXmlLoader加载位于jar文件中的jrxml:获取java.io。FileNotFoundException[重复]


我在我的Java应用程序中使用JasperReport。

我有一个名为“报告”的包来存储生成的所有报告。这是我在应用程序中调用jasper报告的方式。

JasperDesign jd  = JRXmlLoader.load("C:\\Users\\Sandaru Weerathunga\\Desktop\\Dasatha Institute\\src\\reports\\teacherPay.jrxml");


我没有给出完整的路径,而是尝试了:

JasperDesign jd  = JRXmlLoader.load("/reports/teacherPay.jrxml");

但是这在运行程序时显示错误:

net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException: 
/reports/teacherPay.jrxml (The system cannot find the path specified)
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:176)
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:156)

不适合将完整路径提供给JRXmlLoader,因为如果您要在其他计算机上运行此应用程序,您必须根据计算机路径更改所有编码。所以帮我这个


共2个答案

匿名用户

/不计前车之鉴是一个绝对的文件路径,意思是,转到当前驱动器的根目录,在不计前车之鉴目录中找到文件不计前车之鉴…

如果我没看错的话这不是你想要的

相反,尝试将报告作为资源加载(鉴于您声明它在包中

JasperDesign jd  = JRXmlLoader.load(getClass().getResource("/reports/teacherPay.jrxml"));

例如,如果报表没有打包在您的应用程序上下文中,那么您将需要使用相对路径。

JasperDesign jd  = JRXmlLoader.load("reports/teacherPay.jrxml");

现在,话虽如此。除非您在运行时进行动态更改,否则您不应该加载jrxml文件,而是应该预先编译文件并加载. jasper文件。这将更快,并且通常不容易出错…

匿名用户

JasperDesign jd  = JRXmlLoader.load(getClass().getResource("/reports/teacherPay.jrxml"));

这在一段时间内不起作用,因为getResource()返回URL。如果您的文件路径包含",则返回"像这样

"C:\\Users\\Sandaru Weerathunga\\Desktop\\Dasatha Institute\\src\\reports\\teacherPay.jrxml"

返回

"C:\\Users\\Sandaru%20Weerathunga\\Desktop\\Dasatha%20Institute\\src\\reports\\teacherPay.jrxml"

在这件事上,您可以使用getResourceAsStream()方法来重新调整InputStream。试试这个,这对我有用。

JasperReport jp = JasperCompileManager.compileReport(getClass().getResourceAsStream("/reports/teacherPay.jrxml"));