繁体   English   中英

验证字符串输入可以是有效路径

[英]Validate String input COULD be a valid path

我希望验证一个字符串路径。 我不想检查路径是否存在或创建路径(包括create + then delete),我只想检查输入字符串COULD是执行系统上的验证路径。

到目前为止,我一直在搞乱File类,没有运气。 我希望我的OSX机器上的以下内容失败,但它没有:

File f = new File("!@£$%^&*()±§-_=+[{}]:;\"'|>.?/<,~`±");
System.out.println(f.getCanonicalPath());

有什么能帮我的吗?

你可以通过正则表达式来实现: javascript中的文件路径验证

或者通过检查路径的父节点是否存在: Java中是否有办法确定路径是否有效而不尝试创建文件?

请注意,路径取决于操作系统: https//serverfault.com/questions/150740/linux-windows-unix-file-names-which-characters-are-allowed-which-are-unesc

另外,仅仅因为路径有效,并不意味着可以在那里写入文件。 例如,在Linux中,您需要成为超级用户才能写入/ usr /

您可以选择使用正则表达式来检查路径。 正则表达式看起来像:

^(?:[a-zA-Z]\:|\\\\[\w\.]+\\[\w.$]+)\\(?:[\w]+\\)*\w([\w.])+$

Regexr就是一个例子。 您可以使用String.matches(regex)函数在Java进行检查。 以下示例:

public static void main(String[] args) throws Exception {

    String regex = "^(?:[a-zA-Z]\\:|\\\\\\\\[\\w\\.]+\\\\[\\w.$]+)\\\\(?:[\\w]+\\\\)*\\w([\\w.])+$";
    String path = "c:\\folder\\myfile.txt";

    System.out.println(path.matches(regex));

}

请注意,由于必须转义\\字符,正则表达式看起来要长得多 )。 只需调用yourPathString.matches(regex) ,如果它是有效路径,它将返回true。

如果路径有效,则必须至少存在一个父文件链。 如果不存在父级,则它必须无效。

public static boolean isValidPath(File file) throws IOException {
    file = file.getCanonicalFile();

    while (file != null) {
        if (file.exists()) {
            return true;
        }

        file = file.getParentFile();
    }

    return false;
}

System.out.println(isValidPath(new File("/Users/something")));  // true (OS X)
System.out.println(isValidPath(new File("asfq34fawrf")));  // false

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM