我在互联网上搜索这个问题,但没有找到任何专门解决这个问题的东西(有一些getResources()
帖子,但没有像我的问题),所以我现在在这里问这个问题:
我正在使用 Netbeans8.0.2,并希望使用[MY_CLASS_HERE].class.getResources()
在 JAR 中包含一些文件并从其中内部加载它,但由于某种原因,它仅适用于图像而不适用于其他内容,例如如果我有:
SomeClass.class.getResource("/someImage.jpg");
SomeClass.class.getResource("/someImage.png");
SomeClass.class.getResource("/someImage.gif");
...
以上所有工作都很好,并且符合预期:在项目构建期间,它不会将其放入任何文件夹 - 它只是将其包含在我的JAR文件中。但是如果我输入图像文件以外的任何其他内容,例如:
SomeClass.class.getResource("/someFile.obj");
它只是抱怨找不到这样的文件:
java.io.FileNotFoundException: file:Z:JAVAMYPROJECTbuildclassessomeFile.obj (The filename, directory name, or volume label syntax is incorrect)
我的所有文件(图像和我想以这种方式使用的所有其他类型的文件)都在 NetBeans 项目中完全相同的文件夹"资源">中...
奇怪的是,为什么它也不抱怨图像呢?
为什么会这样以及如何解决这个问题 - 任何人都可以告诉吗?
更新:
@Jerome的建议适用于使用他的代码成功加载任何其他文件类型和图像:
Someclass.class.getRessourceAsStream("/someFile.obj");
它加载文件,但另一个问题是我需要路径的字符串表示,所以当我使用时:
Someclass.class.getRessourceAsStream("/someFile.obj").toString();
。然后它会抛出另一个错误,因为它无法读取文件内容,因为路径的字符串解释如下所示:
java.io.BufferedInputStream@215d7ea7
。当然,我的代码期望像普通路径字符串这样的东西,例如:
"JARFILE/resources/someFile.obj"
所以我更新的问题是:现在如何将其解释为普通路径字符串?还是我应该开始另一个(新)主题?
为了进一步解释它:对于这样的参数属性,我需要我的 .obj 文件的字符串路径:
api.parameter("filename", "obj/someFile.obj");
上面的示例适用于我的应用程序的先前版本,其中我将该 .obj 文件放置在与我的.jar文件位于同一目录中的名为"obj"的文件夹中,但现在我试图用代码将其包含在 JAR 本身中:
api.parameter("filename", Vectors.class.getResourceAsStream("/someFile.obj").toString());
。它不再工作(因为路径字符串解释不是文件的路径),我正在尝试找到解决这种"路径字符串"混乱的方法。
尝试使用Someclass.class.getRessourceAsStream(...)
或ClassLoader.getSystemClassLoader().getResourceAsStream(...)
但要小心,它会返回一个InputStream
而不是一个URL
。