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

时间:2013-07-21 16:51:23

标签: java embedded-resource

您好我已将我的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");

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

4 个答案:

答案 0 :(得分:2)

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

然后

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

应该有效。至少从一个帖子开始,如果使用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

参考:getResourceAsStream fails under new environment?

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

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

参考:Java Resources Folder Error In Eclipse

答案 1 :(得分:1)

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

尝试使用Class.#getResourceAsStream是可行的方法。但是这种方法不会返回FileInputStream。它返回一个InputStream,它是一个接口。

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

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

excel文件位于目录

resources/my/pack/age

答案 2 :(得分:0)

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

我的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();
        }
    }

}

答案 3 :(得分:0)

  

FileInputStream file =(FileInputStream)   this.getClass()的getResourceAsStream( “/资源/ Excel.xlsx”);

为什么需要FileInputStream?使用

InputStream is = getClass().getResourceAsStream..

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

  

新   文件(System.getProperty( “user.dir来”)+文件分割符+ “资源” +文件分割符+ “Excel.xlsx”));

很难控制斜线。使用

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