詳細(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.沒(méi)有異常拋出。
file.mkdirs()創(chuàng)建文件夾連同該文件夾的父文件夾,如果創(chuàng)建成功返回true,創(chuàng)建失敗返回false。創(chuàng)建失敗同樣沒(méi)有異常拋出。
@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)建失敗的原因沒(méi)有說(shuō)明。是父文件夾不存在所以創(chuàng)建失???還是文件夾已經(jīng)存在所以創(chuàng)建失敗?還是因?yàn)榇疟PIO原因?qū)е聞?chuàng)建文件夾失?。?/p>
二、Java NIO創(chuàng)建文件夾
為了解決傳統(tǒng)IO創(chuàng)建文件夾中異常失敗處理問(wèn)題不明確的問(wèn)題,在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)建,沒(méi)有異常拋出;
如果因?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語(yǔ)言中,創(chuàng)建指定目錄包含四種方法,涉及兩個(gè)不同類 java.io.File類 和 java.nio.file.Files
file.mkdir()創(chuàng)建文件夾成功返回true,失敗返回false。如果被創(chuàng)建文件夾的父文件夾不存在也返回false.沒(méi)有異常拋出。
file.mkdirs()創(chuàng)建文件夾連同該文件夾的父文件夾,如果創(chuàng)建成功返回true,創(chuàng)建失敗返回false。創(chuàng)建失敗同樣沒(méi)有異常拋出。
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)建,沒(méi)有異常拋出;
如果因?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)文章
在VSCode里使用Jupyter?Notebook調(diào)試Java代碼的詳細(xì)過(guò)程
Jupyter Notebook是以網(wǎng)頁(yè)的形式打開(kāi),可以在網(wǎng)頁(yè)頁(yè)面中直接編寫代碼和運(yùn)行代碼,代碼的運(yùn)行結(jié)果也會(huì)直接在代碼塊下顯示的程序,這篇文章主要介紹了在VSCode里使用Jupyter?Notebook,調(diào)試Java代碼,需要的朋友可以參考下2022-07-07Java8 將一個(gè)List<T>轉(zhuǎn)為Map<String,T>的操作
這篇文章主要介紹了Java8 將一個(gè)List<T>轉(zhuǎn)為Map<String, T>的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02SpringBoot項(xiàng)目使用mybatis-plus逆向自動(dòng)生成全套代碼
在JavaWeb工程中,每一個(gè)SSM新項(xiàng)目或者說(shuō)是SpringBoot項(xiàng)目也好,都少不了model、controller、service、dao等層次的構(gòu)建。使用mybatis-plus逆向可以自動(dòng)生成,感興趣的可以了解一下2021-09-09Java+EasyExcel實(shí)現(xiàn)文件上傳功能
這篇文章主要為大家詳細(xì)介紹了如何通過(guò)Java和EasyExcel實(shí)現(xiàn)文件上傳功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-02-02Java中零拷貝和深拷貝的原理及實(shí)現(xiàn)探究(代碼示例)
深拷貝和零拷貝是兩個(gè)在 Java 中廣泛使用的概念,它們分別用于對(duì)象復(fù)制和數(shù)據(jù)傳輸優(yōu)化,下面將詳細(xì)介紹這兩個(gè)概念的原理,并給出相應(yīng)的 Java 代碼示例,感興趣的朋友一起看看吧2023-12-12解決使用ProcessBuilder踩到的坑及注意事項(xiàng)
這篇文章主要介紹了解決使用ProcessBuilder踩到的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06