我正在使用此代码
String path = getClass().getResource("Template.xls").getPath();
当我在我的机器(Windows)上运行时,一切都很好。我甚至在get资源部分和get路径部分上执行了system.out.println,结果是:
file:/ C:/Eclipse/Netbeans/SoftwareCom/build/classes/assets/Template.xls
/C:/Eclipse/Netbeans/SoftwareCom/build/classes/assets/Template.xls
但是我收到了一些用户的以下错误报告
java.nio.file.InvalidPathException: Illegal char <:> at index 4:
file:\C:\Software%20Com\SoftwareCom.exe!\assets\Template.xls
我不知道发生了什么事,或者为什么它会对某些人而不是其他人起作用
任何指针?
答案 0 :(得分:6)
要正确回答这个问题,了解您想要对路径信息做什么会很有帮助。要阅读该文件,您不需要该路径。 你可以打电话
getClass().getResourceAsStream("Template.xls")
如果您真的想知道路径,请致电
URL url = getClass().getResource("Template.xls");
Path dest = Paths.get(url.toURI());
这可能会导致问题,因为您似乎将java文件打包在Windows可执行文件中。见Error in URL.getFile()
编辑您的评论:
正如我上面所写,你不需要复制源的路径。你可以使用
getClass().getResourceAsStream("Template.xls")
获取文件的内容并将内容写入您想要编写的内容。失败的原因是第二个示例中的文件包含在可执行文件中:
file:\C:\Software%20Com\SoftwareCom.exe
从路径中可以看出:
file:\C:\Software%20Com\SoftwareCom.exe!\assets\Template.xls
感叹号表示资源位于该文件中。 它在Netbeans中工作,因为资源没有打包在jar中,而是文件系统上的单独文件。 您应该尝试在您的计算机上运行exe-version。它很可能也会失败。如果您需要更多信息或帮助,请提供完整的代码。
答案 1 :(得分:2)
我也遇到了同样的问题,并使用良好的File File API解决了该问题
URL url = MyClass.class.getClassLoader().getResource("myScript.sh");
Path scriptPath = new File(url.getPath()).toPath();
成功了!