如何检查(String)位置是否是Java中的有效保存路径?

时间:2011-06-27 22:20:15

标签: java validation file location

我从用户收到一个字符串,该字符串应该用作将内容保存到文件的位置。此字符串应包含足够的信息,如目录+文件名。

我的问题是,如何检查提供的字符串是否是将内容保存到文件的有效路径(至少在理论上)?

是否创建目录无关紧要,或者是否具有对该位置本身的适当访问权限。我只对检查提供的字符串的结构感兴趣。

我该怎么办?我在考虑创建一个File对象,然后提取它的URI。还有更好的办法吗?

4 个答案:

答案 0 :(得分:10)

您可以使用File.getCanonicalPath()根据当前的操作系统规则进行验证。

import java.io.File;
import java.io.IOException;

public class FileUtils {
  public static boolean isFilenameValid(String file) {
    File f = new File(file);
    try {
       f.getCanonicalPath();
       return true;
    }
    catch (IOException e) {
       return false;
    }
  }

  public static void main(String args[]) throws Exception {
    // true
    System.out.println(FileUtils.isFilenameValid("well.txt"));
    System.out.println(FileUtils.isFilenameValid("well well.txt"));
    System.out.println(FileUtils.isFilenameValid(""));

    //false
    System.out.println(FileUtils.isFilenameValid("test.T*T"));
    System.out.println(FileUtils.isFilenameValid("test|.TXT"));
    System.out.println(FileUtils.isFilenameValid("te?st.TXT"));
    System.out.println(FileUtils.isFilenameValid("con.TXT")); // windows
    System.out.println(FileUtils.isFilenameValid("prn.TXT")); // windows
    }
  }

答案 1 :(得分:2)

你看过Apache Commons IO了吗?该库包括用于处理路径信息的各种事物,这些信息可能有助FilenameUtils.getPath(String filename)从完整文件名返回路径。

答案 2 :(得分:1)

最简单:尝试保存,听取异常。

我唯一一次做更复杂的事情就是如果要延迟写作,并且你想给用户提供他的反馈现在

答案 3 :(得分:0)

这是我到目前为止所做的:

private static boolean checkLocation(String toCheck) {

    // If null, we necessarily miss the directory section
    if ( toCheck == null ) {
        System.out.println("Missing directory section");
        return false;
    }

    String retrName = new File(toCheck).toURI().toString();

    // Are we dealing with a directory?
    if ( retrName.charAt(retrName.length()-1) == '/') {
        System.out.println("Missing file name");
        return false;
    }

    return true;

}

这告诉我是否有正确的目录结构以及我是否指向目录而不是文件。我不需要I / O访问。

我注意到如果我在明确指向目录的位置(目前还不存在)上使用File.createNewFile()方法,Java会创建一个没有扩展名的文件,这是完全错误的。它应该创建一个目录,否则会引发某种错误。

此外,如果参数中没有提供,则File构造器倾向于添加当前目录。它没有记录,但在我的案例中没有真正的伤害。

如果有人有更好的解决方案,我会批准。

修改

我最后将上述内容与RealHowTo的输入结合起来。