Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检查文件路径在java中是否无效/不存在_Java_Java Io - Fatal编程技术网

如何检查文件路径在java中是否无效/不存在

如何检查文件路径在java中是否无效/不存在,java,java-io,Java,Java Io,我的任务是以最终用户指定的路径保存文件(必须是绝对路径)。我目前面临三种不同的情况,如下所示: 路径名无效(无法创建)-对于ex,用户提供的路径名:sfg rgdf gfggdgfudf 路径名无效(但可以创建)-用于例如:C:\Parent\Child\孙子(此处C:\Parent存在,而Child\孙子不存在) 路径名对ex:C:\Parent\Test有效(即目录存在)- 对于第一种情况,我需要将文件保存在默认位置。 第二,我需要创建目录并保存文件。 最后,我将保存在指定的路径中 下面是我

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

  • 路径名无效(无法创建)-对于ex,用户提供的路径名:sfg rgdf gfggdgfudf
  • 路径名无效(但可以创建)-用于例如:C:\Parent\Child\孙子(此处C:\Parent存在,而Child\孙子不存在)
  • 路径名对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被大多数文件系统欣然接受。如果您不想在路径/文件名中使用空格,您已经需要自己检查有效性,例如使用正则表达式。

    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) 使用第1种方法再次检查路径是否有效。如果其有效,请检查文件夹是否存在

    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;
             }
        }
    

    JavaNIO使这变得简单。无论目录是否已存在且已创建,该方法都会成功

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

    如果您确实想检查用户是否输入了绝对路径,只需使用。

    为什么您认为
    sfg rgdf gfggdgfufdf
    是无效路径?这是有效的。它指向当前目录中名为
    sfg rgdf gfggdgfufdf
    的目录。在这里查看Christopher Oezbek的回答,他列出了无效的路径字符,因此您可以筛选类似myFolderPath.contains(“:”)或myFolderPath.matches(“regex_代表无效的_字符”)的字符串这是平台相关的。am使用绝对路径,在这种情况下,kut igeiguye jh对我无效。