繁体   English   中英

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

[英]how to access resources(Excel file) in jar file

您好我已将我的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异常。 哪有错,任何人都可以帮忙吗?

第一步是在项目中包含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

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

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

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

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

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

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

}

我打赌你的项目中没有名为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)")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM