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

Jér*_*nge 4 java validation location file

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

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

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

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

Rea*_*wTo 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
    }
  }
Run Code Online (Sandbox Code Playgroud)

  • 我知道这是旧的但是。不适用于像“a>a”这样的路径的窗口。getCanonicalPath 不会引发任何异常,但系统不允许 '>' 字符(除其他外)。 (2认同)