带有getPath的java.nio.file.InvalidPathException

时间:2016-08-11 05:25:26

标签: java

我正在使用此代码

 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

我不知道发生了什么事,或者为什么它会对某些人而不是其他人起作用

任何指针?

2 个答案:

答案 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();

成功了!