有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JAVA尼奥。文件带有getPath的InvalidPathException

我正在使用这个代码

 String path =  getClass().getResource("Template.xls").getPath();

当我在我的机器(windows)上运行它时,一切都很好。我甚至还做了这个系统。出来获取资源部分和获取路径部分的println,结果为:

文件:/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) 个答案

  1. # 1 楼答案

    我也遇到了同样的问题,并通过使用好的ol文件API来解决它

    URL url = MyClass.class.getClassLoader().getResource("myScript.sh");
    Path scriptPath = new File(url.getPath()).toPath();
    

    成功了

  2. # 2 楼答案

    为了正确地回答这个问题,了解您想要对路径信息执行的操作会很有帮助。要读取文件,不需要路径。 你可以打个电话

    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版本。它很可能也会失败。如果您需要更多信息或帮助,请提供完整的代码