如何检查文件路径是否 invalid/does 不存在于 java

how to check if the file path is invalid/does not exist in java

我的任务是在最终用户指定的路径中保存一个文件(必须是绝对路径)。我目前面临以下三种不同的情况:

  1. 路径名无效(无法创建)- 例如,用户提供的路径名:sfg rgdf gfggdgfudf
  2. 路径名无效(但可以创建)- for ex : C:\Parent\Child\GrandChildren(此处为 C:\Parent 存在,而 Child\GrandChildren 不存在。
  3. 路径名有效(即目录存在)- for ex : C:\Parent\Test

对于第一种情况,我需要将文件保存在默认位置。 第二,我需要创建目录并保存文件。 最后,我会保存在指定的路径中。

下面是我的代码片段,它将文件保存在第一个和第二个场景的默认位置。我很难区分第一和第二。 java.io.File.mkdirs 适用于第二种情况,但不适用于第一种情况。 请忽略我糟糕的代码,因为我是这种编程语言的新手。任何输入将不胜感激。

//User input must be absolute path
String  saveToFolder = "kut igeiguye jh";
String defaultFolder = "C:\Parent\Data";
try{
    File file = new File(saveToFolder);
    if(!file.exists()){
        saveToFolder = defaultFolder;
    }
    file.mkdirs();
    }catch(Exception e){
    saveToFolder = defaultFolder;
    }
//code to save data in path **saveToFolder**

kut igeiguye jh 很高兴地被大多数文件系统所接受。如果您不想在 path/filenames 中使用空格,您已经需要自己检查有效性,例如使用正则表达式。

1) 对于第一种情况,使用正则表达式来确定路径是否有效

String regularExpression = "([a-zA-Z]:)?(\[a-zA-Z0-9_-]+)+\?" ; // this regex for windows. If you are running in linux then regex will be different.

    Pattern pattern = Pattern.compile(regularExpression);

    boolean isMatched = Pattern.matches(regularExpression,saveToFolder);

2) 使用第一种方法再次检查路径是否有效。如果其有效检查文件夹是否存在。

File f = new File(saveToFolder);
if (f.exists() && f.isDirectory()) {
   ...
}

3) 如果路径通过第一种方法有效并且存在第二种方法.

感谢所有提供意见的人。我对有效的代码进行了一些更改。我的作业要求之一是我的程序必须将绝对路径作为输入。 使用下面的代码,我可以将数据保存在案例 1 的默认位置;正在为案例 2 创建新文件夹并将文件保存在新创建的文件夹中;并将文件保存在案例 3 的指定路径中。

    String  saveToFolder = "kut igeiguye jh";
    String defaultFolder = "C:\Parent\Data";

    try{
        File file = new File(saveToFolder);
        boolean dirCreated = file.mkdirs();
        if(!dirCreated || (file.getParent().equals(null))){
            saveToFolder = defaultFolder;
        }
    }catch(Exception e){
        saveToFolder = defaultFolder;
    }

    System.out.println("save to folder : " +saveToFolder);

您可以使用 isFile() 来验证 exists()。我没有检查所有情况,但这应该对你有帮助。

public static void checkPath(){
    String saveToFolder = "file/User.txt";
    String defaultFolder = "file/data/";
    try{
        File file = new File(saveToFolder);
        if(!file.isFile()){
           saveToFolder = defaultFolder;
           System.out.println("File not found");
         }
         file.mkdirs();
         }catch(Exception e){
            saveToFolder = defaultFolder;
         }
    }

Java NIO 使这变得简单。方法Files.createDirectories无论目录已经存在还是不存在已经创建成功。

try {
    Files.createDirectories(Paths.get(saveToFolder));
}
catch (IOException e) {
    System.err.println("Using default folder due to the following exception: " + e);
    saveToFolder = defaultFolder;
}

如果你真的想检查用户是否输入了绝对路径,只需使用Path.isAbsolute()