📜  递归创建目录的Java程序

📅  最后修改于: 2022-05-13 01:54:58.428000             🧑  作者: Mango

递归创建目录的Java程序

目录/文件夹是计算中使用的文件系统,用作存储相关文件甚至子文件夹的命名内存位置。这允许更好地管理文件和文件夹,并且以用于存储文件的真实文件夹的概念为前提。该系统是对内存进行分区的实现,使工作空间更有条理。目录文件系统允许分层排列以及在其他目录中嵌套目录。

递归是函数调用自身的过程。这是将复杂问题分解为更小的子部分的非常有用的方法。

方法:

  1. 使用 目录() 方法
  2. 使用createDirectory() 的方法 Java.nio 包

方法#1:

第一种方法是导入Java.io.File 类并定义一个名为 file() 的方法,该方法在内部使用 mkdir()函数递归创建目录。 file() 方法中使用的算法如下所述。

算法 :

  1. 创建返回类型为 void 的 file() 方法。
  2. 这个方法需要三个参数:
    • 代表主目录的字符串 md。
    • 代表要制作的目录结构的字符串路径,其中每个字符表示一个新目录
    • Int depth 表示要创建的目录数。
  3. 将终止条件声明为 if (depth == 0) return。
  4. 减少每次递归调用的深度。
  5. 检查路径字符串的长度是否为 0 并相应地显示消息。
  6. 将 md 附加到路径字符串的第一个字符,并从每次递归调用的路径字符串中删除第一个字符。
  7. 创建一个以 md 为参数的 File 类的对象。
  8. 使用exists() 方法检查目录是否已经存在并显示消息。
  9. 否则使用 mkdir() 方法创建目录。
  10. 进行递归调用

下面是上述程序的实现。

Java
// Java code to create directories recursively
  
import java.io.File;
  
class GFG {
  
    // function to create directories
    static void file(String md, String path, int depth)
    {
  
        // md stores the starting path
        // each character in path represents new
        // directory depth stores the number
        // ofdirectories to be created
        // terminating condition
  
        if (depth == 0)
            return;
  
        // decrementing the depth by 1
        depth -= 1;
  
        // checking if the path exists
        if (path.length() == 0)
            System.out.println("Path does not exist");
  
        // execute if the path has more directories
        else {
  
            // appending the next directory
            // would be md = md + "\\" +
            // path.charAt(0) for windows
            md = md + "/" + path.charAt(0);
  
            // removing the first character
            // from path string
            path = path.substring(1);
  
            // creating File object
            File f = new File(md);
  
            // if the directory already exists
            if (f.exists()) {
                System.out.println("The Directory "
                                   + "already exists");
            }
            else {
  
                // creating the directory
                boolean val = f.mkdir();
                if (val)
                    System.out.println(md + " created"
                                       + " successfully");
                else
                    System.out.println(
                        "Unable to "
                        + "create Directory");
            }
        }
  
        // recursive call
        file(md, path, depth);
    }
  
    // Driver method
    public static void main(String[] args)
    {
  
        // creating class object
        GFG ob = new GFG();
  
        // path for windows -> "C:\\Users\\
        // harshit\\Desktop"
        ob.file("/home/mayur/Desktop", "abcd", 4);
    }
}


Java
// Java code to create directories recursively
  
// importing the packages
import java.nio.file.Paths;
import java.nio.file.Path;
import java.nio.file.Files;
import java.io.IOException;
  
class GFG {
  
    // defining the recursive method
    static void file(String md, String path, int depth)
    {
  
        // base case
        if (depth == 0)
            return;
  
        // decrement the depth
        depth -= 1;
  
        // check if the path is empty
        if (path.length() == 0)
            System.out.println("Path does not exist");
        else {
  
            // appending the first charcter from
            // path string
            md = md + "/" + path.charAt(0);
  
            // removing the first character from
            // path string
            path = path.substring(1);
  
            // creating the path instance from
            // path string
            Path p = Paths.get(md);
  
            // if the directory already exists
            if (!Files.exists(p)) {
                try {
  
                    // creating directory
                    Files.createDirectories(p);
                    System.out.println(md + " created"
                                       + " successfully");
                }
                catch (IOException err) {
                    err.printStackTrace();
                }
            }
            else
                System.out.println("The directory "
                                   + "already exists");
        }
  
        // recursive call
        file(md, path, depth);
    }
  
    // Driver Code
    public static void main(String[] args)
    {
  
        // creating the object of the class
        GFG ob = new GFG();
  
        // md would be -> "C:\\Users\\harshit\\
        // Desktop for windows
        ob.file("/home/mayur/Desktop", "klm", 5);
    }
}


输出:

方法#2:

这种方法利用Java.nio 包来实现代码。我们在这里部署 createDirectories() 方法来创建新目录。我们还利用 try-catch 块来捕获 IO 错误。该算法可以在下面找到。

算法:

  1. 重复方法 1 中算法中提到的步骤 1-6。
  2. 现在,使用 Path.gets() 方法将字符串md 转换为 Path Instance。
  3. 再次,使用exists() 方法检查目录是否已经存在。
  4. 如果目录不存在,打开一个 try-catch 块,并使用 createDirectories() 方法创建一个新目录。
  5. 否则,显示目录已经存在。
  6. 进行递归调用

下面是上述程序的实现。

Java

// Java code to create directories recursively
  
// importing the packages
import java.nio.file.Paths;
import java.nio.file.Path;
import java.nio.file.Files;
import java.io.IOException;
  
class GFG {
  
    // defining the recursive method
    static void file(String md, String path, int depth)
    {
  
        // base case
        if (depth == 0)
            return;
  
        // decrement the depth
        depth -= 1;
  
        // check if the path is empty
        if (path.length() == 0)
            System.out.println("Path does not exist");
        else {
  
            // appending the first charcter from
            // path string
            md = md + "/" + path.charAt(0);
  
            // removing the first character from
            // path string
            path = path.substring(1);
  
            // creating the path instance from
            // path string
            Path p = Paths.get(md);
  
            // if the directory already exists
            if (!Files.exists(p)) {
                try {
  
                    // creating directory
                    Files.createDirectories(p);
                    System.out.println(md + " created"
                                       + " successfully");
                }
                catch (IOException err) {
                    err.printStackTrace();
                }
            }
            else
                System.out.println("The directory "
                                   + "already exists");
        }
  
        // recursive call
        file(md, path, depth);
    }
  
    // Driver Code
    public static void main(String[] args)
    {
  
        // creating the object of the class
        GFG ob = new GFG();
  
        // md would be -> "C:\\Users\\harshit\\
        // Desktop for windows
        ob.file("/home/mayur/Desktop", "klm", 5);
    }
}

输出: