自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

總結(jié)Java中創(chuàng)建并寫文件的5種方式

新聞 后端
在java中有很多的方法可以創(chuàng)建文件寫文件,你是否真的認(rèn)真的總結(jié)過?下面筆者就幫大家總結(jié)一下java中創(chuàng)建文件的五種方法。

 在java中有很多的方法可以創(chuàng)建文件寫文件,你是否真的認(rèn)真的總結(jié)過?下面筆者就幫大家總結(jié)一下java中創(chuàng)建文件的五種方法。

  1. Files.newBufferedWriter 
  2. Files.write 
  3. PrintWriter 
  4. File.createNewFile 
  5. FileOutputStream.write(byte[] b) 

實(shí)際上不只這5種,通過管道流的排列組合,其實(shí)有更多種,但是筆者總結(jié)的這五種可以說是最常用及最佳實(shí)踐,

前提小知識(shí)

以前我在寫技術(shù)文章涉及到“流關(guān)閉”、“連接關(guān)閉”的時(shí)候,經(jīng)常有人留言:“還寫技術(shù)文章,寫個(gè)流都不知道close()”,這種留言我遇到過無數(shù)回!

在本文中大量的使用到了try-with-resources語法,這個(gè)語法真的是很久的了,但是的確還有小伙伴不知道(知道的小伙伴就略過吧)。我還是說一下,下文中的管道流不是我沒close,是自動(dòng)關(guān)閉close的。

  1. try(管道流、連接等實(shí)現(xiàn)了Closeable接口的類){ 
  2.     //這里使用類對象操作 
  3. //用try()包含起來,就不用在finally里面自己手動(dòng)的去 Object.close()了,會(huì)自動(dòng)的關(guān)閉 

1. Java 8 Files.newBufferedWriter

java8 提供的newBufferedWriter可以創(chuàng)建文件,并向文件內(nèi)寫入數(shù)據(jù)??梢酝ㄟ^追加寫模式,向文件內(nèi)追加內(nèi)容。

  1. @Test 
  2. void testCreateFile1() throws IOException { 
  3.    String fileName = "D:\\data\\test\\newFile.txt"
  4.  
  5.    Path path = Paths.get(fileName); 
  6.    // 使用newBufferedWriter創(chuàng)建文件并寫文件 
  7.    // 這里使用了try-with-resources方法來關(guān)閉流,不用手動(dòng)關(guān)閉 
  8.    try (BufferedWriter writer = 
  9.                    Files.newBufferedWriter(path, StandardCharsets.UTF_8)) { 
  10.       writer.write("Hello World -創(chuàng)建文件!!"); 
  11.    } 
  12.  
  13.    //追加寫模式 
  14.    try (BufferedWriter writer = 
  15.                 Files.newBufferedWriter(path, 
  16.                         StandardCharsets.UTF_8, 
  17.                         StandardOpenOption.APPEND)){ 
  18.        writer.write("Hello World -字母哥!!"); 
  19.    } 

2. Java 7 Files.write

下面的這種方式 Files.write ,是筆者推薦的方式,語法簡單,而且底層是使用Java NIO實(shí)現(xiàn)的。同樣提供追加寫模式向已經(jīng)存在的文件種追加數(shù)據(jù)。這種方式是實(shí)現(xiàn)文本文件簡單讀寫最方便快捷的方式。

  1. @Test 
  2. void testCreateFile2() throws IOException { 
  3.    String fileName = "D:\\data\\test\\newFile2.txt"
  4.  
  5.    // 從JDK1.7開始提供的方法 
  6.    // 使用Files.write創(chuàng)建一個(gè)文件并寫入 
  7.    Files.write(Paths.get(fileName), 
  8.                "Hello World -創(chuàng)建文件!!".getBytes(StandardCharsets.UTF_8)); 
  9.  
  10.    // 追加寫模式 
  11.    Files.write( 
  12.          Paths.get(fileName), 
  13.          "Hello World -字母哥!!".getBytes(StandardCharsets.UTF_8), 
  14.          StandardOpenOption.APPEND); 

3. PrintWriter

PrintWriter是一個(gè)比較古老的文件創(chuàng)建及寫入方式,從JDK1.5就已經(jīng)存在了,比較有特點(diǎn)的是:PrintWriter的println方法,可以實(shí)現(xiàn)一行一行的寫文件。

  1. @Test 
  2. void testCreateFile3() throws IOException { 
  3.    String fileName = "D:\\data\\test\\newFile3.txt"
  4.  
  5.    // JSD 1.5開始就已經(jīng)存在的方法 
  6.    try (PrintWriter writer = new PrintWriter(fileName, "UTF-8")) { 
  7.       writer.println("Hello World -創(chuàng)建文件!!"); 
  8.       writer.println("Hello World -字母哥!!"); 
  9.    } 
  10.  
  11.    // Java 10進(jìn)行了改進(jìn),支持使用StandardCharsets指定字符集 
  12.    /*try (PrintWriter writer = new PrintWriter(fileName, StandardCharsets.UTF_8)) { 
  13.  
  14.       writer.println("first line!"); 
  15.       writer.println("second line!"); 
  16.  
  17.    } */ 
  18.  

4. File.createNewFile()

createNewFile()方法的功能相對就比較純粹,只是創(chuàng)建文件不做文件寫入操作。 返回true表示文件成功,返回 false表示文件已經(jīng)存在.可以配合FileWriter 來完成文件的寫操作。

  1. @Test 
  2. void testCreateFile4() throws IOException { 
  3.    String fileName = "D:\\data\\test\\newFile4.txt"
  4.  
  5.    File file = new File(fileName); 
  6.  
  7.    // 返回true表示文件成功 
  8.    // false 表示文件已經(jīng)存在 
  9.    if (file.createNewFile()) { 
  10.       System.out.println("創(chuàng)建文件成功!"); 
  11.    } else { 
  12.       System.out.println("文件已經(jīng)存在不需要重復(fù)創(chuàng)建"); 
  13.    } 
  14.  
  15.    // 使用FileWriter寫文件 
  16.    try (FileWriter writer = new FileWriter(file)) { 
  17.       writer.write("Hello World -創(chuàng)建文件!!"); 
  18.    } 
  19.  

5.最原始的管道流方法

最原始的方式就是使用管道流嵌套的方法,但是筆者覺得這種方法歷久彌新,使用起來非常靈活。你想去加上Buffer緩沖,你就嵌套一個(gè)BufferedWriter,你想去向文件中寫java對象你就嵌套一個(gè)ObjectOutputStream。但歸根結(jié)底要用到FileOutputStream。

  1. @Test 
  2. void testCreateFile5() throws IOException { 
  3.    String fileName = "D:\\data\\test\\newFile5.txt"
  4.    try(FileOutputStream fos = new FileOutputStream(fileName); 
  5.       OutputStreamWriter osw = new OutputStreamWriter(fos); 
  6.       BufferedWriter bw = new BufferedWriter(osw);){ 
  7.       bw.write("Hello World -創(chuàng)建文件!!"); 
  8.       bw.flush(); 
  9.    } 

 

責(zé)任編輯:張燕妮 來源: 博客園
相關(guān)推薦

2019-11-21 11:10:21

云遷移云計(jì)算

2019-05-16 13:00:18

異步編程JavaScript回調(diào)函數(shù)

2022-03-18 09:42:54

JavaString

2022-11-17 15:17:12

Java數(shù)據(jù)結(jié)構(gòu)Map

2012-02-16 10:36:43

Java

2019-01-14 05:09:03

5G網(wǎng)絡(luò)4G

2019-05-29 19:00:35

HTML5存儲(chǔ)方式前端

2017-06-14 16:44:15

JavaScript原型模式對象

2022-07-22 08:18:28

JARJava對象

2023-07-05 11:14:35

IT領(lǐng)導(dǎo)者IT咨詢

2020-06-17 08:12:05

Kubernetes容器

2020-04-26 22:22:10

物聯(lián)網(wǎng)廣告IOT

2021-05-06 16:19:36

物聯(lián)網(wǎng)IoT

2021-06-17 10:33:29

IT首席意見企業(yè)實(shí)踐

2020-10-27 18:47:30

物聯(lián)網(wǎng)環(huán)境IOT

2010-03-18 15:31:13

Java創(chuàng)建線程

2019-10-10 11:50:38

Java線程開發(fā)

2020-11-13 06:18:07

JupyterPython數(shù)據(jù)分析

2021-12-01 15:40:40

節(jié)日開源剪貼畫

2011-03-23 11:22:14

oracle dbli
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)