如何在jar文件中访问资源(Excel文件)

您好我已将我的java项目导出为可执行jar文件。 在我的项目中我正在访问包含一些数据的Excel文件。 现在,当我尝试访问该文件时,我无法访问Excel文件。

我的项目结构是:
Java_Project_Folder
– src_Folder
– resources_Folder(包含excel文件)

我正在访问excel文件,如

FileInputStream file=new FileInputStream(new File(System.getProperty("user.dir") +File.separator+"resources"+File.separator+"Excel.xlsx")); 

我尝试使用getResourceAsStream访问此文件,如:

 FileInputStream file=(FileInputStream) this.getClass().getResourceAsStream ("/resources/Excel.xlsx"); 

但我进入是nullexception。 哪有错,任何人都可以帮忙吗?

我试过这个,它对我有用。

我的Test1类在默认包中,只是检查你的访问类在任何包中的位置,如果是,那么从类路径返回到精确资源文件夹,就像这个“../”

 public class Test1 { public static void main(String[] args) { new Test1(); } Test1(){ BufferedInputStream file= (BufferedInputStream) this.getClass().getResourceAsStream("resources/a.txt"); try { System.out.println((char)file.read()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 

第一步是在项目中包含excel文件本身。 您可以像显示一样创建资源文件夹,但为了确保它包含在您的jar中,您可以将resources文件夹与源代码文件一起添加,以便将其内置到jar中。

然后

 InputStream excelContent = this.getClass().getResourceAsStream("/resources/Excel.xlsx"); 

应该管用。 至少从一个post开始,如果使用ClassLoader,前导斜杠也可能会搞乱。

 getClass().getResourceAsStream("/a/b/c.xml") ==> a/b/c.xml getClass().getResourceAsStream("a/b/c.xml") ==> com/example/a/b/c.xml getClass().getClassLoader().getResourceAsStream("a/b/c.xml") ==> a/b/c.xml getClass().getClassLoader().getResourceAsStream("/a/b/c.xml") ==> Incorrect 

ref: getResourceAsStream在新环境下失败了吗?

同样在eclipse中,您可以将resources文件夹设置为源文件夹,如下所示:

在eclipse项目的属性中,转到java构建路径,选择源,并检查是否添加了所有需要的源fodler(作为源文件夹)。 如果缺少某些,只需使用添加源…按钮手动添加它们

ref: Eclipse中的Java资源文件夹错误

我打赌你的项目中没有名为resources包。

尝试使用Class。#getResourceAsStream是要走的路。 但是此方法不返回FileInputStream 。 它返回一个InputStream它是一个接口。

您应该传递资源的绝对名称

 InputStream is = getClass().getResourceAsStream("my/pack/age/Excel.xlsx"); 

excel文件位于目录中的位置

 resources/my/pack/age 

FileInputStream file =(FileInputStream)this.getClass()。getResourceAsStream(“/ resources / Excel.xlsx”);

为什么需要FileInputStream? 使用

 InputStream is = getClass().getResourceAsStream.. 

其次使用“resources / Excel.xlsx”第三个在构造这样的文件时

新文件(System.getProperty(“user.dir”)+ File.separator +“resources”+ File.separator +“Excel.xlsx”));

难以控制斜线。 使用

 new File("parent (userdir property)", "child (resources\Excel.xlsx)")