4

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

我的项目结构是:
Java_Project_Folder
- src_Folder
- resources_Folder(包含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");

但我进入的是空异常。有什么问题可以帮忙吗?

4

4 回答 4

3

我敢打赌resources,您的项目中没有调用任何包。

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

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

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

excel文件所在目录的位置

resources/my/pack/age
于 2013-07-21T17:09:11.217 回答
2

第一步是将 excel 文件本身包含在您的项目中。您可以像显示的那样创建资源文件夹,但要确保它包含在您的 jar 中,您需要将资源文件夹与源代码文件一起添加,以便将其构建到 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 中,您可以将资源文件夹设置为源文件夹,如下所示:

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

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

于 2013-07-21T17:03:06.957 回答
1

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

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

}
于 2013-07-21T17:06:28.013 回答
0

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)")
于 2013-07-21T17:14:45.430 回答