java.io.FileNotFoundException上的现有文件(java.io.FileNo

2019-07-30 12:35发布

当我试图打开一个文件,我得到这个错误:

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工作区项目src文件夹,没有这样的例外是返回(尽管这种方法也bin文件夹创建World_X.fr文件)。

什么我其实想做的是通过这个得到的.jar文件的绝对位置:

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

然后我追加“World_X.fr”到fileLocation字符串,但这个是行不通的。 请帮我在这方面。

Answer 1:

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

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


Answer 2:

要转换的首选方式file:网址为实际的File是这样的:

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

这需要所有检查的关怀和报价/转义。

使用getPath()而不是将离开这些边角余料给你。



Answer 3:

下面是该解决方案,这只会JDK1.5工作后,

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


Answer 4:

尝试留出了20%,而正常使用空格代替。 此外,你如果你使用反斜线请务必先进行转义使用反斜杠,在你的代码。



Answer 5:

该解决方案证实是相当老,即使它适用于这个特定的情况下,它是更方便地使用URLDecoder,因为20%是只有一个编码的字符,但在你的路径可以有一大堆不同的编码字符。

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


文章来源: java.io.FileNotFoundException on an existing file