当前位置: 首页 > 面试题库 >

在Java Web应用程序上使用JasperReports获取“找不到文件异常”

许正平
2023-03-14
问题内容

我正在通过预先设计的Jrxml文件从My Java Web
Application创建Jasper报告。该文件位于名为jrxml的目录中的我的Web文件夹(Netbeans)中,因此我尝试使用此方法进行操作。

public void generateChurchReport(IncomeExpenseBean ieb) {
        church = ieb.getChurch();
        user = ieb.getUser();
        String currdate = dt.getCurrentDate();
        Connection conn = db.getDbConnection();
        Map parameters = new HashMap();
        try{ 
        parameters.put("ChurchName", church);
        JasperReport jasperReport = JasperCompileManager.compileReport("/jrxml/ChurchIncome_expenseReport.jrxml");
        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, conn);
        File f = new File(user + church+ currdate +  ".pdf");
        JasperExportManager.exportReportToPdfFile(jasperPrint, f.getAbsolutePath());
        Desktop.getDesktop().open(new File(f.getAbsolutePath())); 
        }catch(Exception asd){
            System.out.println(asd.getMessage());
        }

    }

我收到“文件未找到”异常,因为应用程序期望文件位于某处;

  C:\Program Files\glassfish-3.1.2.2\glassfish\domains\TestDom\jrxml\

如何在Web文件夹中读取此文件,以及如何在同一文件夹内创建报告?

编辑 如果我不提供任何路径,如果jrxml文件位于该位置,则在C:\ Program Files \ glassfish-3.1.2.2 \
glassfish \ domains \ TestDom \处生成我的报告。


问题答案:

您在这里做错的是,您正在尝试从Java类在Web文件夹中的某个位置找到 jrxml
文件。由于不正确的上下文路径,这肯定会在运行时引发“找不到文件错误”。您可以简单地执行以下操作:

  1. 在您的Java类包下创建一个名为“ Jrxml”的文件夹。假设Java类包是 com.ejb.beans ,请创建一个文件夹 com.ejb.beans.jrxml
  2. 将所有 jrxml 文件放入此文件夹。
  3. 在您的Java类中,加载 类加载器 并通过其名称找到 jrxml ,您将可以轻松访问它。这是代码:-

ClassLoader classLoader = getClass().getClassLoader();

InputStream url = null;

url = classLoader.getResourceAsStream("Report.jrxml");

该网址可用于将报告编译为:-

JasperReport jasperReport = JasperCompileManager.compileReport(url);

要创建报告输出文件,可以将其存储在应用程序服务器中的某个路径。在环境变量中设置服务器路径,并在运行时将其提取到类中:

String serverHomeDir = System.getProperty("server.home.dir");

String reportDestination = serverHomeDir + "/domains/ReportOutput/report.html";

// now print report at reportDestination
JasperExportManager.exportReportToHtmlFile(jasperPrint, reportDestination);

您的html文件将在所需的目标位置生成,您可以轻松地通过您的网页以所需的方式阅读和呈现该文件。



 类似资料:
  • 我正在尝试用单节点hadoop集群运行一个示例程序。我在运行示例程序(jar文件)时遇到一个异常。 多谢了。

  • servlet-context.xml 应用程序上下文. xml 调用方法 堆栈跟踪

  • 已安装Java版本(签入控制面板): jre1.6.0,Java更新2, Java更新3, Java更新5, Java更新31 (在C:/Program Files/Java相关文件夹中找到:jre1.6.0、jre1.6.0_02、jre1.6.0_03、jre1.6.0_05、jre6) 根据http://docs.oracle.com/javase/1.5.0/docs/guide/java

  • 问题内容: 有没有办法在Spring应用程序中静态/全局地请求ApplicationContext的副本? 假设主类启动并初始化了应用程序上下文,它是否需要通过调用堆栈将其向下传递给需要它的任何类,或者是否有一种方法可以让类要求先前创建的上下文?(我认为必须是单身人士?) 问题答案: 如果需要访问容器的对象是容器中的Bean,则只需实现BeanFactoryAware或ApplicationCon

  • 我有一个带有Yarn的Flink集群,使用flink-quickstart-java原型构建一个演示项目。在使用'mvn clean package-pbuild-jar'命令构建fat-jar之后,并使用'flink run-m yar-cluster-yn2./flink-Snapshot-1.0.jar'提交程序,程序会抛出以下异常: 下面是我的演示: 和一些版本信息: FLink版本:1.