詳細總結(jié)Java創(chuàng)建文件夾的方法及優(yōu)缺點
一、傳統(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)建文件,但是它們在異常處理的環(huán)節(jié)做的非常不友好。創(chuàng)建失敗之后統(tǒng)一返回false,創(chuàng)建失敗的原因沒有說明。是父文件夾不存在所以創(chuàng)建失?。窟€是文件夾已經(jīng)存在所以創(chuàng)建失???還是因為磁盤IO原因?qū)е聞?chuàng)建文件夾失敗?
二、Java NIO創(chuàng)建文件夾
為了解決傳統(tǒng)IO創(chuàng)建文件夾中異常失敗處理問題不明確的問題,在Java的NIO中進行了改進。
2.1. Files.createDirectory創(chuàng)建文件夾
如果被創(chuàng)建文件夾的父文件夾不存在,則拋出NoSuchFileException.
如果被創(chuàng)建的文件夾已經(jīng)存在,則拋出FileAlreadyExistsException.
如果因為磁盤IO出現(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)存在的文件夾,不會重復創(chuàng)建,沒有異常拋出;
如果因為磁盤IO出現(xiàn)異常,則拋出IOException.
所以,可以使用Files.createDirectories的地方不使用Files.createDirectory,盡量更少的遇到異常。
Path path = Paths.get("D:\\data222\\test"); Path pathCreate = Files.createDirectorys(path);
另外大家要注意:NIO的API創(chuàng)建的文件夾返回值是Path,這樣方便我們在創(chuàng)建完成文件夾之后繼續(xù)向文件夾里面寫入文件數(shù)據(jù)等操作。比傳統(tǒng)IO只返回一個boolean值要好得多。
三、小結(jié)
Java語言中,創(chuàng)建指定目錄包含四種方法,涉及兩個不同類 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.
如果因為磁盤IO出現(xiàn)異常,則拋出IOException.
Files.createDirectories創(chuàng)建文件夾及其父文件夾
如果被創(chuàng)建文件夾的父文件夾不存在,就創(chuàng)建它;
如果被創(chuàng)建的文件夾已經(jīng)存在,就是用已經(jīng)存在的文件夾,不會重復創(chuàng)建,沒有異常拋出;
如果因為磁盤IO出現(xiàn)異常,則拋出IOException.
四種方式中,最優(yōu)方式使用 Files.createDirectories 創(chuàng)建文件夾。
到此這篇關于詳細總結(jié)Java創(chuàng)建文件夾的方法及優(yōu)缺點的文章就介紹到這了,更多相關Java創(chuàng)建文件夾內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
在VSCode里使用Jupyter?Notebook調(diào)試Java代碼的詳細過程
Jupyter Notebook是以網(wǎng)頁的形式打開,可以在網(wǎng)頁頁面中直接編寫代碼和運行代碼,代碼的運行結(jié)果也會直接在代碼塊下顯示的程序,這篇文章主要介紹了在VSCode里使用Jupyter?Notebook,調(diào)試Java代碼,需要的朋友可以參考下2022-07-07Java8 將一個List<T>轉(zhuǎn)為Map<String,T>的操作
這篇文章主要介紹了Java8 將一個List<T>轉(zhuǎn)為Map<String, T>的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02SpringBoot項目使用mybatis-plus逆向自動生成全套代碼
在JavaWeb工程中,每一個SSM新項目或者說是SpringBoot項目也好,都少不了model、controller、service、dao等層次的構(gòu)建。使用mybatis-plus逆向可以自動生成,感興趣的可以了解一下2021-09-09Java中零拷貝和深拷貝的原理及實現(xiàn)探究(代碼示例)
深拷貝和零拷貝是兩個在 Java 中廣泛使用的概念,它們分別用于對象復制和數(shù)據(jù)傳輸優(yōu)化,下面將詳細介紹這兩個概念的原理,并給出相應的 Java 代碼示例,感興趣的朋友一起看看吧2023-12-12