getPath()和Java中的空格

8
我最近遇到了getPath()的问题。
我的代码大概长这样:
File path = new File(Main.class.getResource("/worlds/").getPath());
File[] files = path.listFiles();

现在的问题是,如果主类路径中有空格,path.listFiles() 将返回 null。如果没有空格,一切正常运行。
如果将路径打印到 cmd 中,你会看到每个空格都被替换为 %20
2个回答

13

那不是将URL转换成文件的正确方法。请尝试使用以下方法:

new File(Main.class.getResource("/worlds/").toURI());

3

不要这样做。getResource() 返回的 资源URL 不一定是文件系统上的文件,而 File 则代表文件系统上的文件。


也许有其他更好的方法,但我无法看到相对于程序执行路径读取目录内容的更好方式。 - Simiil
new File("./worlds").listFiles() - Ryan Stewart
1
@MasterCassim:我想看到证据。问题描述中的错误与不正确解码URL并尝试将其用作文件路径有关。我的建议不使用URL,那么它怎么会导致相同的错误呢? - Ryan Stewart
@MasterCassim:这很好用。只有当当前目录中没有“worlds”时,你才会得到“files == null”。要查看它正在查找目录的位置,请添加System.out.println("Looking in " + path.getAbsolutePath());。在它正在查找的路径上创建一个worlds目录,然后再试一次。 - Ryan Stewart
@Ryan Stewart:你建议使用 new File("./worlds"),但是它没有在正确的目录中查找,那么为什么要使用 getResource() 呢?因为它返回了正确的目录。因此,你的建议不能被采纳。我知道问题出在哪里 ;) - Tobias
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接