我在我的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,因为如果您要在其他计算机上运行此应用程序,您必须根据计算机路径更改所有编码。所以帮我这个
/不计前车之鉴
是一个绝对的文件路径,意思是,转到当前驱动器的根目录,在不计前车之鉴
目录中找到文件不计前车之鉴…
如果我没看错的话这不是你想要的
相反,尝试将报告作为资源加载(鉴于您声明它在包中
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"));