现有文件的java.io.FileNotFoundException

时间:2012-07-19 16:55:13

标签: java filenotfoundexception java-io

我在尝试打开文件时遇到此错误:

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文件夹中复制相同的文件时,不会返回此类Exception(尽管此方法还会在bin文件夹中创建World_X.fr文件)。

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

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

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

5 个答案:

答案 0 :(得分:16)

file:网址转换为实际File的首选方法是:

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

这会处理所有检查和引用/转义。

使用getPath()会将这些奇数位留给您。

答案 1 :(得分:9)

您需要将%20转移到空格。 e.g:

fileLocation = new String(
    Main.class.getProtectionDomain().getCodeSource().getLocation().getPath())
    .replaceAll("%20", " ");

答案 2 :(得分:6)

这是解决方案,这只适用于JDK1.5,

try { f = new File("somePath".toURI().getPath()); } catch(Exception e) {}

答案 3 :(得分:0)

尝试省略%20,然后使用普通空格。此外,如果您使用反斜杠,则在代码中使用反斜杠,请确保先将其转义。

答案 4 :(得分:0)

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

fileLocation = URLDecoder.decode(Main.class.getProtectionDomain().getCodeSource().getLocation().getPath(), "UTF-8");