詳細(xì)總結(jié)Java創(chuàng)建文件夾的方法及優(yōu)缺點(diǎn)
一、傳統(tǒng)API創(chuàng)建文件夾方式
Java傳統(tǒng)的IO API種使用java.io.File類中的file.mkdir()和file.mkdirs()方法創(chuàng)建文件夾
file.mkdir()創(chuàng)建文件夾成功返回true,失敗返回false。如果被創(chuàng)建文件夾的父文件夾不存在也返回false.沒有異常拋出。
file.mkdirs()創(chuàng)建文件夾連同該文件夾的父文件夾,如果創(chuàng)建成功返回true,創(chuàng)建失敗返回false。創(chuàng)建失敗同樣沒有異常拋出。
@Test
void testCreateDir1() {
//“D:\data111”目錄現(xiàn)在不存在
String dirStr = "D:\\data111\\test";
File directory = new File(dirStr);
//mkdir
boolean hasSucceeded = directory.mkdir();
System.out.println("創(chuàng)建文件夾結(jié)果(不含父文件夾):" + hasSucceeded);
//mkdirs
hasSucceeded = directory.mkdirs();
System.out.println("創(chuàng)建文件夾結(jié)果(包含父文件夾):" + hasSucceeded);
}
輸出結(jié)果如下:使用mkdir創(chuàng)建失敗,使用mkdirs創(chuàng)建成功。
創(chuàng)建文件夾結(jié)果(不含父文件夾):false
創(chuàng)建文件夾結(jié)果(包含父文件夾):true
大家可以看到,mkdir和mkdirs雖然可以創(chuàng)建文件,但是它們?cè)诋惓L幚淼沫h(huán)節(jié)做的非常不友好。創(chuàng)建失敗之后統(tǒng)一返回false,創(chuàng)建失敗的原因沒有說明。是父文件夾不存在所以創(chuàng)建失???還是文件夾已經(jīng)存在所以創(chuàng)建失???還是因?yàn)榇疟PIO原因?qū)е聞?chuàng)建文件夾失???
二、Java NIO創(chuàng)建文件夾
為了解決傳統(tǒng)IO創(chuàng)建文件夾中異常失敗處理問題不明確的問題,在Java的NIO中進(jìn)行了改進(jìn)。
2.1. Files.createDirectory創(chuàng)建文件夾
如果被創(chuàng)建文件夾的父文件夾不存在,則拋出NoSuchFileException.
如果被創(chuàng)建的文件夾已經(jīng)存在,則拋出FileAlreadyExistsException.
如果因?yàn)榇疟PIO出現(xiàn)異常,則拋出IOException.
Path path = Paths.get("D:\\data222\\test");
Path pathCreate = Files.createDirectory(path);
2.2.Files.createDirectories創(chuàng)建文件夾及其父文件夾
如果被創(chuàng)建文件夾的父文件夾不存在,就創(chuàng)建它;
如果被創(chuàng)建的文件夾已經(jīng)存在,就是用已經(jīng)存在的文件夾,不會(huì)重復(fù)創(chuàng)建,沒有異常拋出;
如果因?yàn)榇疟PIO出現(xiàn)異常,則拋出IOException.
所以,可以使用Files.createDirectories的地方不使用Files.createDirectory,盡量更少的遇到異常。
Path path = Paths.get("D:\\data222\\test");
Path pathCreate = Files.createDirectorys(path);
另外大家要注意:NIO的API創(chuàng)建的文件夾返回值是Path,這樣方便我們?cè)趧?chuàng)建完成文件夾之后繼續(xù)向文件夾里面寫入文件數(shù)據(jù)等操作。比傳統(tǒng)IO只返回一個(gè)boolean值要好得多。
三、小結(jié)
Java語言中,創(chuàng)建指定目錄包含四種方法,涉及兩個(gè)不同類 java.io.File類 和 java.nio.file.Files
file.mkdir()創(chuàng)建文件夾成功返回true,失敗返回false。如果被創(chuàng)建文件夾的父文件夾不存在也返回false.沒有異常拋出。
file.mkdirs()創(chuàng)建文件夾連同該文件夾的父文件夾,如果創(chuàng)建成功返回true,創(chuàng)建失敗返回false。創(chuàng)建失敗同樣沒有異常拋出。
Files.createDirectory創(chuàng)建文件夾
如果被創(chuàng)建文件夾的父文件夾不存在,則拋出NoSuchFileException.
如果被創(chuàng)建的文件夾已經(jīng)存在,則拋出FileAlreadyExistsException.
如果因?yàn)榇疟PIO出現(xiàn)異常,則拋出IOException.
Files.createDirectories創(chuàng)建文件夾及其父文件夾
如果被創(chuàng)建文件夾的父文件夾不存在,就創(chuàng)建它;
如果被創(chuàng)建的文件夾已經(jīng)存在,就是用已經(jīng)存在的文件夾,不會(huì)重復(fù)創(chuàng)建,沒有異常拋出;
如果因?yàn)榇疟PIO出現(xiàn)異常,則拋出IOException.
四種方式中,最優(yōu)方式使用 Files.createDirectories 創(chuàng)建文件夾。
到此這篇關(guān)于詳細(xì)總結(jié)Java創(chuàng)建文件夾的方法及優(yōu)缺點(diǎn)的文章就介紹到這了,更多相關(guān)Java創(chuàng)建文件夾內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java鎖的升級(jí)策略 偏向鎖 輕量級(jí)鎖 重量級(jí)鎖
在本文中小編給的大家整理了關(guān)于Java鎖的升級(jí)策略 偏向鎖 輕量級(jí)鎖 重量級(jí)鎖的相關(guān)知識(shí)點(diǎn)內(nèi)容,需要的朋友們參考下。2019-06-06
如何解決executors線程池創(chuàng)建的線程不釋放的問題
這篇文章主要介紹了如何解決executors線程池創(chuàng)建的線程不釋放的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
Spring Boot高級(jí)教程之Spring Boot連接MySql數(shù)據(jù)庫
這篇文章主要為大家詳細(xì)介紹了Spring Boot高級(jí)教程之Spring Boot連接MySql數(shù)據(jù)庫,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10
Java Hutool工具實(shí)現(xiàn)驗(yàn)證碼生成及Excel文件的導(dǎo)入和導(dǎo)出
Hutool是一個(gè)小而全的Java工具類庫,通過靜態(tài)方法封裝,降低相關(guān)API的學(xué)習(xí)成本,提高工作效率,本文主要介紹了使用Hutool工具實(shí)現(xiàn)驗(yàn)證碼生成和excel文件的導(dǎo)入、導(dǎo)出,需要的朋友可參考一下2021-11-11
Mybatis Properties 配置優(yōu)先級(jí)詳解
這篇文章主要介紹了Mybatis Properties 配置優(yōu)先級(jí),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
springBoot接入阿里云oss的實(shí)現(xiàn)步驟
這篇文章主要介紹了springBoot接入阿里云oss的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01

