JAVA为什么只有图像才能与class.getResource

时间:2017-03-27 16:04:04

标签: java file netbeans netbeans-8 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());

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

1 个答案:

答案 0 :(得分:0)

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

但请注意,它会返回InputStream而不是URL