JAVA 为什么只有图像适用于 class.getResource

JAVA why only images works with class.getResource

我在互联网上搜索这个问题,但没有找到任何专门解决这个问题的东西(有一些 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:\JAVA\MYPROJECT\build\classes\someFile.obj (The filename, directory name, or volume label syntax is incorrect)

我在 NetBeans 项目中的完全相同的文件夹 "resources" 中拥有所有文件(图像和我想以这种方式使用的所有其他类型)。 ..

奇怪,为什么它也不抱怨图像呢?

这是为什么以及如何解决这个问题 - 谁能告诉我吗?

更新:

@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 文件放在一个名为 "obj" 的文件夹中,该文件夹与我的 .jar 文件位于同一目录中,但现在我正在尝试使用代码将其包含在 JAR 本身中:

api.parameter("filename", Vectors.class.getResourceAsStream("/someFile.obj").toString());

...它不再工作了(因为路径字符串解释不是文件路径),我正试图找到这个 "path string" 混乱的解决方案。

尝试使用Someclass.class.getRessourceAsStream(...)ClassLoader.getSystemClassLoader().getResourceAsStream(...)

但要小心它会 return 一个 InputStream 而不是 URL.