我希望验证字符串路径。我不想检查路径是否存在或创建路径(包括create + then delete),我只想检查输入字符串COULD是执行系统上的验证路径。
到目前为止,我一直在弄乱File
课,但没有运气。我希望我的OSX机器上的以下内容失败,但它没有:
File f = new File("!@£$%^&*()±§-_=+[{}]:;\"'|>.?/<,~`±");
System.out.println(f.getCanonicalPath());
有什么能帮我的吗?
答案 0 :(得分:0)
您可以通过正则表达式执行此操作:File path validation in javascript
或者通过检查路径的父级是否存在:Is there a way in Java to determine if a path is valid without attempting to create a file?
请注意,路径取决于操作系统:https://serverfault.com/questions/150740/linux-windows-unix-file-names-which-characters-are-allowed-which-are-unesc
另外,仅仅因为路径有效,它并不意味着可以在那里写入文件。例如,在Linux中,您需要成为超级用户才能写入/ usr /
答案 1 :(得分:0)
您可以选择使用正则表达式来检查路径。正则表达式看起来像:
^(?:[a-zA-Z]\:|\\\\[\w\.]+\\[\w.$]+)\\(?:[\w]+\\)*\w([\w.])+$
可以看到一个例子here at Regexr。您可以使用Java
功能在String.matches(regex)
中查看此内容。以下示例:
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。
答案 2 :(得分:0)
如果路径有效,则必须至少存在一个父文件链。如果不存在父级,则它必须无效。
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