递归创建目录的Java程序
目录/文件夹是计算中使用的文件系统,用作存储相关文件甚至子文件夹的命名内存位置。这允许更好地管理文件和文件夹,并且以用于存储文件的真实文件夹的概念为前提。该系统是对内存进行分区的实现,使工作空间更有条理。目录文件系统允许分层排列以及在其他目录中嵌套目录。
递归是函数调用自身的过程。这是将复杂问题分解为更小的子部分的非常有用的方法。
方法:
- 使用 目录() 方法
- 使用createDirectory() 的方法 Java.nio 包
方法#1:
第一种方法是导入Java.io.File 类并定义一个名为 file() 的方法,该方法在内部使用 mkdir()函数递归创建目录。 file() 方法中使用的算法如下所述。
算法 :
- 创建返回类型为 void 的 file() 方法。
- 这个方法需要三个参数:
- 代表主目录的字符串 md。
- 代表要制作的目录结构的字符串路径,其中每个字符表示一个新目录
- Int depth 表示要创建的目录数。
- 将终止条件声明为 if (depth == 0) return。
- 减少每次递归调用的深度。
- 检查路径字符串的长度是否为 0 并相应地显示消息。
- 将 md 附加到路径字符串的第一个字符,并从每次递归调用的路径字符串中删除第一个字符。
- 创建一个以 md 为参数的 File 类的对象。
- 使用exists() 方法检查目录是否已经存在并显示消息。
- 否则使用 mkdir() 方法创建目录。
- 进行递归调用
下面是上述程序的实现。
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-6。
- 现在,使用 Path.gets() 方法将字符串md 转换为 Path Instance。
- 再次,使用exists() 方法检查目录是否已经存在。
- 如果目录不存在,打开一个 try-catch 块,并使用 createDirectories() 方法创建一个新目录。
- 否则,显示目录已经存在。
- 进行递归调用
下面是上述程序的实现。
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);
}
}
输出: