8

当我尝试打开文件时出现此错误:

java.io.FileNotFoundException: D:\Portable%20Programs\Android%20Development\workspace3\XXX-desktop\bin\World_X.fr (The system cannot find the path specified)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(Unknown Source)
    at java.util.Scanner.<init>(Unknown Source)

该文件存在于目录中,但我仍然收到此错误。但是,当我在 Eclipse 工作区 Project src 文件夹中复制相同的文件时,不会返回此类异常(尽管此方法还会在 bin 文件夹中创建 World_X.fr 文件)。

我实际上想做的是通过以下方式获取 .jar 文件的绝对位置:

fileLocation = new String(Main.class.getProtectionDomain().getCodeSource().getLocation().getPath());

然后我将“World_X.fr”附加到 fileLocation 字符串,但这不起作用。请在这方面帮助我。

4

5 回答 5

22

file:将URL 转换为实际 URL的首选方法File是:

File file = new File(url.toURI());

这负责所有检查和引用/转义。

相反,使用getPath()这些奇数位将由您决定。

于 2012-07-19T17:58:58.863 回答
10

您需要取消转义%20to 空间。例如:

fileLocation = new String(
    Main.class.getProtectionDomain().getCodeSource().getLocation().getPath())
    .replaceAll("%20", " ");
于 2012-07-19T16:57:44.573 回答
6

这是解决方案,仅在JDK1.5之后才有效,

try { f = new File("somePath".toURI().getPath()); } catch(Exception e) {}
于 2013-05-24T06:48:51.900 回答
1

已确认的解决方案相当陈旧,即使它适用于这种特殊情况,使用 URLDecoder 也更方便,因为 %20 只是一个编码字符,但在您的路径中可能有很多不同的编码字符。

fileLocation = URLDecoder.decode(Main.class.getProtectionDomain().getCodeSource().getLocation().getPath(), "UTF-8");
于 2018-04-30T11:21:44.600 回答
0

尝试省略 %20,并改用普通空格。此外,您在代码中使用反斜杠,如果您使用反斜杠,请确保先转义它们。

于 2012-07-19T16:58:07.500 回答