在Java中,有没有办法在不尝试创建文件的情况下确定路径是否有效?

2022-08-31 11:37:41

我需要确定用户提供的字符串是否是有效的文件路径(即,如果成功或抛出异常),但我不想用无用的文件膨胀文件系统,这些文件只是为了验证目的而创建。createNewFile()

有没有办法确定我拥有的字符串是否是有效的文件路径,而无需尝试创建文件?

我知道“有效文件路径”的定义因操作系统而异,但我想知道是否有任何快速接受或拒绝的方法。C:/foo/foobanana

一种可能的方法可能是尝试创建文件,如果创建成功,最终将其删除,但我希望有一种更优雅的方法来获得相同的结果。


答案 1

Java 7 中引入的 Path 类添加了新的替代项,如下所示:

/**
 * <pre>
 * Checks if a string is a valid path.
 * Null safe.
 *  
 * Calling examples:
 *    isValidPath("c:/test");      //returns true
 *    isValidPath("c:/te:t");      //returns false
 *    isValidPath("c:/te?t");      //returns false
 *    isValidPath("c/te*t");       //returns false
 *    isValidPath("good.txt");     //returns true
 *    isValidPath("not|good.txt"); //returns false
 *    isValidPath("not:good.txt"); //returns false
 * </pre>
 */
public static boolean isValidPath(String path) {
    try {
        Paths.get(path);
    } catch (InvalidPathException | NullPointerException ex) {
        return false;
    }
    return true;
}

编辑:
注意Ferrybig的评论:“Linux上文件名中唯一不允许的字符是NUL字符,这在Linux下确实有效。


答案 2

这也会检查目录是否存在。

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

看起来 file.canWrite() 没有给你一个明确的指示,如果你有权写到目录。


推荐