Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果目录以点开头,则File.getCanonicalPath()返回错误_Java_File - Fatal编程技术网

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()){
    ...
}