Eclipse 从不同项目加载文件

Eclipse loading file from different project

为了让开始新项目更容易,我 'factored' 将我经常使用的几个 classes 放到了 eclipse 中的一个单独项目中。我称这个项目为一体机。它拥有我经常重用的各种抽象 classes 和 OpenGL 相关方法。

(一体机包含在构建路径中)

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

我猜这与不知道 shdr 文件夹及其内容的父项目有关;或者在测试项目中看到 class 是 'created',它不会在 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:

在为所有主要内容创建单独的项目之前,这工作得很好。我希望这只是一些我不知道或理解的简单问题。

提前致谢。

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

有关 Class.getResourceAsStream() 的 Api-Doc 了解更多信息。

根据 Guenther 所说的,我已经尝试过但没有成功。我确实受到启发并发现这有效。

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

输出类似于

的东西
/workspace/All-In-One/bin/shdr/default.vert