在Java中对文件进行操作时常常用到java.io.File.mkdir()和java.io.File.mkdirs()两个方法来创建一个目录(文件夹),这两个方法非常相似,都是无参数且返回值都为boolean类型的方法,都是用于创建指定路径名称对应的目录,但二者主要区别如下:
java.io.File.mkdir():只能创建一级目录,且父目录必须存在,否则无法成功创建一个目录。
java.io.File.mkdirs():可以创建多级目录,父目录不一定存在。
下面给出一个例程可以深刻体会二者的区别:
<span style="font-size:18px;">import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* mkdir与mkdirs测试例程
* 时间:2016-5-15 22:34
* 说明:1、java.io.File.mkdir()和java.io.File.mkdirs()都用于创建指定路径名称对应的目录。
* 但java.io.File.mkdir()只能创建一级目录且父目录必须存在,否则将无法正确创建一个目录;
* java.io.File.mkdir()可以创建多级目录,父目录不一定存在。
* */
public class mkdirsAndmkdirTestMain {
private static final String path1="path1";
private static final String path2="path2/path2/";
private static final String path3="path3";
private static final String path4="path4/path4/";
private static final String filePath1="file1.txt";
/**
* @param args
*/
public static void main(String[] args) {
File file1=new File(path1);
if(!file1.exists()){
file1.mkdir();
}
System.out.println(file1.getPath());
File file2=new File(path2);
if(!file2.exists()){
file2.mkdir();
}
System.out.println(file2.getPath());
File file3=new File(path3);
if(!file3.exists()){
file3.mkdirs();
}
System.out.println(file3.getPath());
File file4=new File(path4);
if(!file4.exists()){
file4.mkdirs();
}
System.out.println(file4.getPath());
File file4_1=new File(path4+filePath1);
if(!file4_1.exists()){
try {
file4_1.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println(file4_1.getPath());
try {
PrintWriter pw=new PrintWriter(new BufferedWriter(new FileWriter(file4_1)));
long current=System.currentTimeMillis();
String time=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(current));
pw.write("时间:"+time);
pw.println();
pw.println("当前文件绝对路径:"+file4_1.getAbsolutePath());
pw.write("当前文件相对路径:"+file4_1.getPath());
pw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
</span>
编译运行,可以在该例程工程目录(文件夹)下看到如下结果:
path1是一个一级路径,使用java.io.File.mkdir()可以成功创建对应的目录;
而path2是一个二级路径,使用java.io.File.mkdir()却不能创建对应的目录;
path3是一个一级路径,path4是一个二级路径,分别使用java.io.File.mkdirs()均可以成功创建各自对应的目录。