JAVA 为什么只有图像才能与 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: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

最新更新