Java 如果目录以点开头,则File.getCanonicalPath()返回错误
注意:问题无效,问题是由错误放置的Java 如果目录以点开头,则File.getCanonicalPath()返回错误,java,file,Java,File,注意:问题无效,问题是由错误放置的引起的。该问题已标记,以便版主删除 我创建了一个函数来检查(文件/目录)路径是否有效,而不检查它是否存在 public static boolean isValidPath(String path) { File f = new File(path); try { f.getCanonicalPath(); return true; } catch (IOException e) { re
引起的父函数中的代码>。该问题已标记,以便版主删除
我创建了一个函数来检查(文件/目录)路径是否有效,而不检查它是否存在
public static boolean isValidPath(String path) {
File f = new File(path);
try {
f.getCanonicalPath();
return true;
} catch (IOException e) {
return false;
}
}
问题是File.getCanonicalPath()代码>在任何目录以点开头时返回错误,尽管它是Windows的有效目录路径。这会导致函数返回false
,该值应为true
。
例如,路径C:\Users\Tim\AppData\Roaming\.minecraft\bin
返回false
,而C:\Users\Tim\AppData\Roaming\minecraft\bin
没有minecraft目录上的点返回true
。目录名中带有点的第一个路径确实存在于我的系统中,我正在运行64位Windows 7。是否有其他功能来检查路径是否有效,或者我还能做些什么来解决此问题
import java.io.*;
class TestDirWithDot {
public static boolean isValidPath(String path) {
File f = new File(path);
try {
f.getCanonicalPath();
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
public static void main(String[] arg) {
System.out.println(System.getProperty("os.name"));
String path = ".dir";
System.out.println(isValidPath(path));
}
}
目录名中带有点的第一个路径确实存在于我的
系统和我运行的是64位Windows 7
所以你会得到
IOException
-如果发生I/O错误,这是可能的,因为规范路径名的构造可能需要文件系统查询
是否有其他函数检查路径是否有效?
试试这个:
你看到了什么样的错误?你能发送stacktrace吗?你是说如果path
是C:\Users\Tim\AppData\Roaming\minecraft\bin
,那么f.getCanonicalPath()
工作正常吗?“提前谢谢,Tim Vise”问题中不包括噪音。我的结果似乎与你的说法相矛盾。为了更快地获得更好的帮助,请发布一个。哇,对不起,这似乎是由父方法引起的。当检查以点开头的目录中的文件是否有效时,这似乎是由.isFile()引起的。尽管如此,当我去除斑点时,效果很好。我将标记我的问题并要求删除它。在Linux
(Ubuntu 12.04,OpenJDK)上也是如此。
Windows Vista
true
File file = new File("c:\fileName");
if (!file.isDirectory())
file = file.getParentFile();
if (file.exists()){
...
}