java中創(chuàng)建、寫入文件的5種方式
在java中有很多的方法可以創(chuàng)建文件寫文件,你是否真的認(rèn)真的總結(jié)過?下面筆者就幫大家總結(jié)一下java中創(chuàng)建文件的五種方法。
Files.newBufferedWriter
(Java 8)Files.write
(Java 7 推薦)PrintWriter
File.createNewFile
FileOutputStream.write(byte[] b)
管道流
實(shí)際上不只這5種,通過管道流的排列組合,其實(shí)有更多種,但是筆者總結(jié)的這五種可以說是最常用及最佳實(shí)踐,
前提小知識
以前我在寫技術(shù)文章涉及到“流關(guān)閉”、“連接關(guān)閉”的時候,經(jīng)常有人留言:“還寫技術(shù)文章,寫個流都不知道close()”,這種留言我遇到過無數(shù)回!
在本文中大量的使用到了try-with-resources語法,這個語法真的是很久的了,但是的確還有小伙伴不知道(知道的小伙伴就略過吧)。我還是說一下,下文中的管道流不是我沒close,是自動關(guān)閉close的。
try(管道流、連接等實(shí)現(xiàn)了Closeable接口的類){ //這里使用類對象操作 } //用try()包含起來,就不用在finally里面自己手動的去 Object.close()了,會自動的關(guān)閉
1. Java 8 Files.newBufferedWriter
java8 提供的newBufferedWriter可以創(chuàng)建文件,并向文件內(nèi)寫入數(shù)據(jù)??梢酝ㄟ^追加寫模式,向文件內(nèi)追加內(nèi)容。
@Test void testCreateFile1() throws IOException { String fileName = "D:\\data\\test\\newFile.txt"; Path path = Paths.get(fileName); // 使用newBufferedWriter創(chuàng)建文件并寫文件 // 這里使用了try-with-resources方法來關(guān)閉流,不用手動關(guān)閉 try (BufferedWriter writer = Files.newBufferedWriter(path, StandardCharsets.UTF_8)) { writer.write("Hello World -創(chuàng)建文件!!"); } //追加寫模式 try (BufferedWriter writer = Files.newBufferedWriter(path, StandardCharsets.UTF_8, StandardOpenOption.APPEND)){ writer.write("Hello World -字母哥!!"); } }
2. Java 7 Files.write
下面的這種方式Files.write,是筆者推薦的方式,語法簡單,而且底層是使用Java NIO實(shí)現(xiàn)的。同樣提供追加寫模式向已經(jīng)存在的文件種追加數(shù)據(jù)。這種方式是實(shí)現(xiàn)文本文件簡單讀寫最方便快捷的方式。
@Test void testCreateFile2() throws IOException { String fileName = "D:\\data\\test\\newFile2.txt"; // 從JDK1.7開始提供的方法 // 使用Files.write創(chuàng)建一個文件并寫入 Files.write(Paths.get(fileName), "Hello World -創(chuàng)建文件!!".getBytes(StandardCharsets.UTF_8)); // 追加寫模式 Files.write( Paths.get(fileName), "Hello World -字母哥!!".getBytes(StandardCharsets.UTF_8), StandardOpenOption.APPEND); }
3. PrintWriter
PrintWriter是一個比較古老的文件創(chuàng)建及寫入方式,從JDK1.5就已經(jīng)存在了,比較有特點(diǎn)的是:PrintWriter的println方法,可以實(shí)現(xiàn)一行一行的寫文件。
@Test void testCreateFile3() throws IOException { String fileName = "D:\\data\\test\\newFile3.txt"; // JSD 1.5開始就已經(jīng)存在的方法 try (PrintWriter writer = new PrintWriter(fileName, "UTF-8")) { writer.println("Hello World -創(chuàng)建文件!!"); writer.println("Hello World -字母哥!!"); } // Java 10進(jìn)行了改進(jìn),支持使用StandardCharsets指定字符集 /*try (PrintWriter writer = new PrintWriter(fileName, StandardCharsets.UTF_8)) { writer.println("first line!"); writer.println("second line!"); } */ }
4. File.createNewFile()
createNewFile()方法的功能相對就比較純粹,只是創(chuàng)建文件不做文件寫入操作。 返回true表示文件成功,返回 false表示文件已經(jīng)存在.可以配合FileWriter 來完成文件的寫操作。
@Test void testCreateFile4() throws IOException { String fileName = "D:\\data\\test\\newFile4.txt"; File file = new File(fileName); // 返回true表示文件成功 // false 表示文件已經(jīng)存在 if (file.createNewFile()) { System.out.println("創(chuàng)建文件成功!"); } else { System.out.println("文件已經(jīng)存在不需要重復(fù)創(chuàng)建"); } // 使用FileWriter寫文件 try (FileWriter writer = new FileWriter(file)) { writer.write("Hello World -創(chuàng)建文件!!"); } }
5.最原始的管道流方法
最原始的方式就是使用管道流嵌套的方法,但是筆者覺得這種方法歷久彌新,使用起來非常靈活。你想去加上Buffer緩沖,你就嵌套一個BufferedWriter,你想去向文件中寫java對象你就嵌套一個ObjectOutputStream。但歸根結(jié)底要用到FileOutputStream。
@Test void testCreateFile5() throws IOException { String fileName = "D:\\data\\test\\newFile5.txt"; try(FileOutputStream fos = new FileOutputStream(fileName); OutputStreamWriter osw = new OutputStreamWriter(fos); BufferedWriter bw = new BufferedWriter(osw);){ bw.write("Hello World -創(chuàng)建文件!!"); bw.flush(); } }
以上就是java中創(chuàng)建、寫入文件的5種方式的詳細(xì)內(nèi)容,更多關(guān)于Java 創(chuàng)建、寫入文件的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Springboot實(shí)現(xiàn)郵箱驗(yàn)證代碼實(shí)例
這篇文章主要介紹了Springboot實(shí)現(xiàn)郵箱驗(yàn)證代碼實(shí)例,在一些業(yè)務(wù)需求中我們經(jīng)常需要使用郵箱進(jìn)行驗(yàn)證碼的收取,本文通過簡單的代碼實(shí)例來說明,需要的朋友可以參考下2024-01-01數(shù)據(jù)結(jié)構(gòu)與算法之并查集(不相交集合)
并查集是一種挺高效的數(shù)據(jù)結(jié)構(gòu)。實(shí)現(xiàn)簡單,只是所有元素統(tǒng)一遵從一個規(guī)律所以讓辦事情的效率高效起來。這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu)與算法——并查集(不相交集合),需要的朋友可以參考下2019-11-11idea使用war以及war exploded的區(qū)別說明
本文詳細(xì)解析了war與warexploded兩種部署方式的差異及步驟,war方式是先打包成war包,再部署到服務(wù)器上;warexploded方式是直接把文件夾、class文件等移到Tomcat上部署,支持熱部署,開發(fā)時常用,文章分別列出了warexploded模式和war包形式的具體操作步驟2024-10-10SpringSecurity?表單登錄的實(shí)現(xiàn)
本文主要介紹了SpringSecurity?表單登錄的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-12-12把spring boot項(xiàng)目發(fā)布tomcat容器(包含發(fā)布到tomcat6的方法)
這篇文章主要介紹了把spring boot項(xiàng)目發(fā)布tomcat容器(包含發(fā)布到tomcat6的方法),然后在文章給大家提到了如何將Spring Boot項(xiàng)目打包部署到外部Tomcat,需要的朋友參考下吧2017-11-11Java讀取properties配置文件時,出現(xiàn)中文亂碼的解決方法
下面小編就為大家?guī)硪黄狫ava讀取properties配置文件時,出現(xiàn)中文亂碼的解決方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-11-11詳解Idea SpringBoot搭建SpringCloud的準(zhǔn)備工作(推薦)
這篇文章主要介紹了Idea SpringBoot搭建SpringCloud的準(zhǔn)備工作(推薦),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10Shiro整合Springboot和redis,jwt過程中的錯誤shiroFilterChainDefinition問
這篇文章主要介紹了Shiro整合Springboot和redis,jwt過程中的錯誤shiroFilterChainDefinition問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-04-04