在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 blocke.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 blocke.printStackTrace();}}}</span>
編譯運行,可以在該常式工程目錄(檔案夾)下看到如下結果:
path1是一個一級路徑,使用java.io.File.mkdir()可以成功建立對應的目錄;
而path2是一個二級路徑,使用java.io.File.mkdir()卻不能建立對應的目錄;
path3是一個一級路徑,path4是一個二級路徑,分別使用java.io.File.mkdirs()均可以成功建立各自對應的目錄。
測試常式原始碼(github)