Can't load jrxml located in jar file via JRXmlLoader: getting java.io.FileNotFoundException [duplicate]

/reports/teacherPay.jrxml is an absolute file path, meaning, go to the root of the current drive and find the file teacherPay.jrxml in the reports directory...

Which, if I read your question correctly, isn't what you want

Instead, try loading the report as a resource (given the fact that you state that it's within a package

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

If the report isn't packaged within your application context, then you will need to use a relative path instead, for example.

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

Now, having said that. Unless you are making dynamic changes at runtime, you shouldn't be loading the jrxml file, but instead, should have pre-compiled the file and should be loading the .jasper file instead. This will be faster and generally less error prone...


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

This is not working some time, because getResource() returns URL. If your file path contains " " it returns "%20" Like this

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

returns

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

In that matter you can use getResourceAsStream() method that retuns InputStream. Try this, This works for me.

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