我在尝试打开文件时遇到此错误:
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字符串,但这不起作用。请帮助我。
答案 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");