首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >贾斯珀报道中的FileNotFoundException

贾斯珀报道中的FileNotFoundException
EN

Stack Overflow用户
提问于 2014-12-26 12:10:02
回答 3查看 7K关注 0票数 0

我正在试图编译jasper文件(Invoice.jrxml),但是我得到了这个FileNotFound异常错误

变量sourceFileName包含文件所在文件的名称。

src/com.medicam.servlets/Invoice.jrxml

下面是我的代码

代码语言:javascript
运行
复制
String [] prod = request.getParameterValues("prodn[]");
        String [] pkgdate = request.getParameterValues("pkgdate[]");
        String [] manufact = request.getParameterValues("manufact[]");
        String [] exp = request.getParameterValues("exp[]");
        String [] batch = request.getParameterValues("batch[]");
        String [] unit = request.getParameterValues("unit[]");
        String [] qty = request.getParameterValues("qty[]");
        String [] subtot = request.getParameterValues("subtot[]");
        ArrayList<String> prodname = new ArrayList<String>();
        ArrayList<String> packagedate = new ArrayList<String>();
        ArrayList<String> manufactdate = new ArrayList<String>();
        ArrayList<String> exipry = new ArrayList<String>();
        ArrayList<String> batchno = new ArrayList<String>();
        ArrayList<String> unitprice = new ArrayList<String>();
        ArrayList<String> quantity = new ArrayList<String>();
        ArrayList<String> Subtotal = new ArrayList<String>();
        Map<String, Object> param = new HashMap<String, Object>();

        for(int i=0;i<prod.length;i++)
        {
            prodname.add(prod[i]);
            packagedate.add(pkgdate[i]);
            manufactdate.add(manufact[i]);
            exipry.add(exp[i]);
            batchno.add(batch[i]);
            unitprice.add(unit[i]);
            quantity.add(qty[i]);
            Subtotal.add(subtot[i]);
        }
        param.put("prodname", prodname);
        param.put("pkgdate", packagedate);
        param.put("manfdate", manufactdate);
        param.put("expdate", exipry);
        param.put("batch", batchno);
        param.put("unit", prodname);
        param.put("qty", quantity);
        param.put("subtot", Subtotal);
        try {
        String sourceFileName = "Invoice.jrxml";
        JasperReport jasperReport = JasperCompileManager.compileReport(sourceFileName);
        JasperFillManager.fillReportToFile(
                 sourceFileName, param);

        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, param, new JREmptyDataSource());
        JasperViewer.viewReport(jasperPrint, false);
            } 
        catch (Exception e) {
                e.printStackTrace();
            } 

StackTrace

代码语言:javascript
运行
复制
net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException: Invoice.jrxml (No such file or directory)
    at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:214)
    at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:185)
    at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:176)
    at net.sf.jasperreports.engine.JasperCompileManager.compile(JasperCompileManager.java:172)
    at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:459)
    at com.medicam.servlets.GenerateReportForPurchase.doPost(GenerateReportForPurchase.java:111)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:644)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:136)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:526)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1078)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:655)
    at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1566)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1523)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.FileNotFoundException: Invoice.jrxml (No such file or directory)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:146)
    at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:209)
    ... 29 more
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-12-26 12:24:12

显然,不能通过简单的文件名找到报表文件。

试着以流的形式加载。像这样

代码语言:javascript
运行
复制
InputStream is=this.getClass().getResourceAsStream("/com/medicam/servlets/Invoice.jrxml")
JasperReport jasperReport = JasperCompileManager.compileReport(is);
票数 2
EN

Stack Overflow用户

发布于 2014-12-26 12:23:52

您需要提供完整的文件名或相对于java当前目录的文件名。与使用文件名相比,最好的替代方法是使用通过InputStream检索的Class#getResourceAsStream。即使您将您的功能打包到jar存档中,它也将继续工作。另一方面,使用文件名意味着您需要将报告作为一个独立的文件分发,并且您必须注意您所提供的更正完整或相对文件名。

票数 1
EN

Stack Overflow用户

发布于 2014-12-26 12:25:14

请提及文件的完整路径,如

字符串sourceFileName = "D:\APPS\Invoice.jrxml";

如果是这样,"Invoice.jrxml“存在于D驱动器的应用程序文件夹中(这是用于windows的)

字符串sourceFileName = "/usr/local/Invoice.jrxml";

如果是这样,"Invoice.jrxml“存在于本地目录中(这是Linux的)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27656934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档