我有一个包含多个报告(文件.jasper
)的jar应用程序,以及我获取报告路径的方式是:
getClass().getResource("/reportes/mireporte.jasper").toString();
但是当我执行时,我得到了下一个错误:FileNotFoundException
虽然当我用winrar打开它时报告在jar文件中。
我的问题是:
答案 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();
}
}