访问jar文件中的报告的问题

时间:2010-11-17 12:10:11

标签: java path jar jasper-reports report

我有一个包含多个报告(文件.jasper)的jar应用程序,以及我获取报告路径的方式是:

getClass().getResource("/reportes/mireporte.jasper").toString();

但是当我执行时,我得到了下一个错误:FileNotFoundException 虽然当我用winrar打开它时报告在jar文件中。

我的问题是:

  1. 这是在jar文件中获取报告路径的方法吗?
  2. 是否可以打开jar文件中的报告?

2 个答案:

答案 0 :(得分:2)

为什么要将资源转换为String ??

尝试使用(取决于您希望如何使用资源):

  • getResource("/report/mireporte.jasper").getFile()

  • getResource("/report/mireporte.jasper").getInputStream()

来自'getResource'的返回对象是URL:

答案 1 :(得分:0)

  

1)这是在jar文件中获取报告路径的方法吗?

是的,请致电getClass().getClassLoader().getResources("mireporte.jasper") - 它会为您提供与该名称相匹配的资源列表。

  

2)是否可以打开jar文件中的报告?

是的!使用getClass().getResourceAsStream("...")并从中读取!

示例:

public static void main(String... args) throws IOException {
    final ClassLoader cl = GetResource.class.getClassLoader();

    // print all resources (could be more than one)
    Enumeration<URL> resources =
        cl.getResources("foo/bla/tjo/mireporte.jasper");

    while (resources.hasMoreElements())
        System.out.println(resources.nextElement());


    // read one of the files
    Scanner s = new Scanner(
            cl.getResourceAsStream("foo/bla/tjo/mireporte.jasper"));
    try {
        while (s.hasNextLine()) {
            System.out.println(s.nextLine());
        }
    } finally {
        if (s != null)
            s.close();
    }
}