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
.
我在互联网上搜索这个问题,但没有找到任何专门解决这个问题的东西(有一些 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
.