如果目录以点开头,File.getCanonicalPath()将返回错误

时间:2013-04-21 14:05:57

标签: java file

注意:无效的问题,问题是由父函数中错误放置的!引起的。该问题已被标记,因此可由主持人删除。


我创建了一个函数来检查(文件/目录)路径是否有效而不检查它是否存在;

public static boolean isValidPath(String path) {
    File f = new File(path);
    try {
        f.getCanonicalPath();
        return true;
    } catch (IOException e) {
        return false;
    }
}

问题是File.getCanonicalPath();在任何目录以点开头时都会返回错误,尽管它是Windows的有效目录路径。这会导致函数返回falsetrue应为C:\Users\Tim\AppData\Roaming\.minecraft\bin。 例如,路径false返回C:\Users\Tim\AppData\Roaming\minecraft\bin而{mine}目录中没有点的true返回{{1}}。目录名中带点的第一个路径确实存在于我的系统上,而我正在运行Windows 7 64位。是否有任何其他功能来检查路径是否有效,或者我还能做些什么来解决这个问题?

2 个答案:

答案 0 :(得分:1)

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));
    }
}

Windows Vista
true

答案 1 :(得分:0)

  

目录名中带点的第一个路径确实存在于我的身上   系统,我正在运行Windows 7 64位。

所以你会得到

IOException - 如果发生I / O错误,这是可能的,因为规范路径名的构造可能需要文件系统查询。

  

是否还有其他功能来检查路径是否有效?   试试这个:

File file = new File("c:\fileName");
if (!file.isDirectory())
   file = file.getParentFile();
if (file.exists()){
    ...
}