来自不同项目的Eclipse加载文件
问题描述:
为了让新项目更容易启动,我将几个定期使用的类放到了eclipse中的一个单独项目中。我称这个项目为All-In-One。它拥有我经常重用的各种抽象类和OpenGL相关方法。来自不同项目的Eclipse加载文件
(包括在构建路径全合一)
我遇到的问题是另外一个项目,我会打电话给它的测试项目。我在测试项目中创建了一个SimpleShader类的实例(引用了All-In-One),但是在运行时,它搜索了default.vert并且没有找到它(java.io.FileNotFoundException)
I' m猜测它与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:
文件的所有主要的东西创建一个单独的项目之前,这个工作就好了。我希望这只是我不了解或理解的简单事情。
在此先感谢。
答
建立在Guenther说的基础上,我已经尝试过,但没有成功。我确实感受到了灵感,发现这很有效。
String filename = SimpleShader.class.getProtectionDomain().getCodeSource().getLocation().toExternalForm().substring(5)+filename;
输出财产以后类同
/workspace/All-In-One/bin/shdr/default.vert
答
将项目放在构建路径上时,无法直接从文件系统访问它们的文件。被引用的项目将被构建为一个jar文件,并将生成的jar放在构建路径中。因此,您必须从类路径中加载您正在查找的资源,例如InputStream stream = TestShader.class.getResourceAsStream(“path/to/resouce”);
有关更多信息,请参阅Api-Doc for Class.getResourceAsStream()。
如何构建路径是什么样子?为什么不使用适当版本的一体机作为jar库? – Gildraths