【发布时间】:2017-08-20 10:44:35
【问题描述】:
我在互联网上搜索这个问题,但没有找到专门处理这个问题的任何东西(有一些 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 文件放在与 .jar 文件相同的目录中名为“obj”的文件夹中,但现在我试图将其包含在带有代码的 JAR 本身:
api.parameter("filename", Vectors.class.getResourceAsStream("/someFile.obj").toString());
...它不再起作用(因为路径字符串解释不是文件的路径),我正在尝试找到解决这个“路径字符串”混乱的解决方案。
【问题讨论】:
-
你知道 Maven 吗?
-
你打开你的罐子看看里面有没有文件?
-
您可能将文件放在错误的文件夹中。
-
请添加 Jar 文件中所有文件的转储。这里有些可疑之处,例如拼写错误的路径名或类似名称。
标签: java file netbeans netbeans-8 getresource