Eclipse从不同的项目加载文件

时间:2016-08-31 07:31:02

标签: java eclipse filesystems project-management fileinputstream

为了让新项目更容易开始,我已经将我经常使用的几个类分解为eclipse中的一个单独项目。我称这个项目为多功能一体机。它包含了我经常重用的各种抽象类和OpenGL相关的方法。

(All-In-One包含在构建路径中)

我遇到的问题是另一个项目,我称之为测试项目。我在测试项目中创建了一个SimpleShader类的实例(引用All-In-One),但是在运行时,它搜索default.vert并且找不到它(java.io.FileNotFoundException)

我猜它与Parent Project有关,不了解shdr文件夹及其内容;或者看到该类在测试项目中“创建”,它不会在All-In-One的src文件夹中查找。我已经尝试将文件夹链接到测试项目中的shdr文件夹,但没有任何改变。

All-In-One Project
    src/
        SimpleShader.java
        shdr/
            default.vert
            .... other files
Test Project
    src/
        Here would be the main file that creates an instance of 
        SimpleShader, which then looks for default.vert (but can't find it)

我用这个

加载文件
String filename = "shdr/default.vert"; // It's actualy passed via a parameter, but this works.
FileInputStream in = new FileInputStream(filename); // Boom java.io.FileNotFoundException:

在为所有主要事项创建一个单独的项目之前,这个工作得很好。我希望这只是一些我不了解或理解的简单。

提前致谢。

2 个答案:

答案 0 :(得分:0)

将项目放在构建路径上时,无法直接从文件系统访问其文件。引用的项目将构建为jar文件,生成的jar将放在构建路径上。因此,您必须从类路径加载您正在查找的资源,例如     InputStream stream = TestShader.class.getResourceAsStream(" path / to / resouce");

有关详细信息,请参阅Api-Doc for Class.getResourceAsStream()。

答案 1 :(得分:0)

根据Guenther的说法,我已经尝试过,但已经没有成功。我确实感到鼓舞,发现这很有效。

String filename = SimpleShader.class.getProtectionDomain().getCodeSource().getLocation().toExternalForm().substring(5)+filename;

输出与

类似的内容
/workspace/All-In-One/bin/shdr/default.vert