最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java中創(chuàng)建寫入文件的6種方式詳解與源碼實(shí)例

 更新時(shí)間:2022年12月10日 14:15:07   作者:啊猿  
這篇文章主要介紹了java中創(chuàng)建寫入文件的6種方式詳解與源碼實(shí)例,Files.newBufferedWriter(Java 8),Files.write(Java 7 推薦),PrintWriter,File.createNewFile,FileOutputStream.write(byte[] b) 管道流,需要的朋友可以參考下

在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í)

以前我在寫技術(shù)文章涉及到“流關(guān)閉”、“連接關(guān)閉”的時(shí)候,經(jīng)常有人留言:“還寫技術(shù)文章,寫個(gè)流都不知道close()”,這種留言我遇到過無數(shù)回!
在本文中大量的使用到了try-with-resources語法,這個(gè)語法真的是很久的了,但是的確還有小伙伴不知道(知道的小伙伴就略過吧)。我還是說一下,下文中的管道流不是我沒close,是自動(dòng)關(guān)閉close的。

try(管道流、連接等實(shí)現(xiàn)了Closeable接口的類){
  //這里使用類對象操作
}
//用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)容。

@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)閉流,不用手動(dòng)關(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)建一個(gè)文件并寫入
  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是一個(gè)比較古老的文件創(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緩沖,你就嵌套一個(gè)BufferedWriter,你想去向文件中寫java對象你就嵌套一個(gè)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();
   bw.close();
  }
}

6、文件工具類

import org.apache.commons.io.FileUtils;
???????public static void saveTxt(String filePath, String fileName, String data){
    try{
        File folder = new File(filePath);
        if(!folder.exists()){
            folder.mkdirs();
        }
        File file = new File(filePath + "/" + fileName);
        FileUtils.writeStringToFile(file,data,"UTF-8");
    }catch(IOEException e){
        log.error("error")
    }
}

以上就是6種java創(chuàng)建寫入文件的方式,包括源碼實(shí)例,更多關(guān)于JAVA創(chuàng)建讀寫文件的方法請查看下面的相關(guān)鏈接

相關(guān)文章

  • SpringCloud?LoadBalancerClient?負(fù)載均衡原理解析

    SpringCloud?LoadBalancerClient?負(fù)載均衡原理解析

    LoadBalancerClient?是?SpringCloud?提供的一種負(fù)載均衡客戶端,Ribbon?負(fù)載均衡組件內(nèi)部也是集成了?LoadBalancerClient?來實(shí)現(xiàn)負(fù)載均衡,本文給大家深入解析?LoadBalancerClient?接口源碼,感興趣的朋友跟隨小編一起看看吧
    2022-02-02
  • Java攔截器Interceptor實(shí)現(xiàn)原理及代碼示例

    Java攔截器Interceptor實(shí)現(xiàn)原理及代碼示例

    本文詳細(xì)講解了Java攔截器Interceptor實(shí)現(xiàn)原理及代碼示例,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • Springboot整合AOP和redis的示例詳解

    Springboot整合AOP和redis的示例詳解

    本文主要介紹了Springboot整合AOP和Redis的詳細(xì)過程,包括AOP的依賴引入和默認(rèn)配置屬性,日志切面格式以及Redis的自動(dòng)配置和連接池使用,總結(jié)了在多線程環(huán)境下,選擇合適的連接方式和客戶端是非常重要,感興趣的朋友一起看看吧
    2024-11-11
  • JAVA SFTP文件上傳、下載及批量下載實(shí)例

    JAVA SFTP文件上傳、下載及批量下載實(shí)例

    本篇文章主要介紹了JAVA SFTP文件上傳、下載及批量下載實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • 基于Java實(shí)現(xiàn)簡易的局域網(wǎng)對話系統(tǒng)

    基于Java實(shí)現(xiàn)簡易的局域網(wǎng)對話系統(tǒng)

    這篇文章主要介紹了基于Java實(shí)現(xiàn)的簡易的局域網(wǎng)對話系統(tǒng),文中的示例代碼對我們學(xué)習(xí)Java有一定的幫助,感興趣的小伙伴快來跟隨小編一起學(xué)習(xí)一下吧
    2021-12-12
  • Java類加載異常:java.lang.ClassNotFoundException解決方法

    Java類加載異常:java.lang.ClassNotFoundException解決方法

    這篇文章主要給大家介紹了關(guān)于Java類加載異常:java.lang.ClassNotFoundException的解決方法,異常是Java編程語言中的一個(gè)標(biāo)準(zhǔn)異常類,它繼承自類,當(dāng)在運(yùn)行時(shí)嘗試加載類時(shí),如果系統(tǒng)找不到指定的類文件就會(huì)拋出該異常,需要的朋友可以參考下
    2023-11-11
  • 深入剖析Java中的各種異常處理方式

    深入剖析Java中的各種異常處理方式

    這篇文章主要介紹了深入剖析Java中的各種異常處理方式,是Java入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-07-07
  • Servlet實(shí)現(xiàn)共享數(shù)據(jù)JavaWeb組件的幾種方法

    Servlet實(shí)現(xiàn)共享數(shù)據(jù)JavaWeb組件的幾種方法

    本文將結(jié)合實(shí)例代碼,介紹Servlet實(shí)現(xiàn)共享數(shù)據(jù)JavaWeb組件的幾種方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • SpringBoot多環(huán)境日志配置方式

    SpringBoot多環(huán)境日志配置方式

    SpringBoot?默認(rèn)使用LogBack日志系統(tǒng),默認(rèn)情況下,SpringBoot項(xiàng)目的日志只會(huì)在控制臺(tái)輸入,本文給大家介紹SpringBoot多環(huán)境日志配置方式,需要的朋友可以參考下
    2024-08-08
  • 深入探究Java線程不安全的原因與解決

    深入探究Java線程不安全的原因與解決

    線程不安全這個(gè)問題,一般在學(xué)Java時(shí),我們老師會(huì)讓我們背誦一段長長的話。"當(dāng)不同線程同時(shí)能訪問同一個(gè)變量時(shí),可能會(huì)導(dǎo)致線程不安全"。實(shí)際上,這句話重點(diǎn)想突出的只有原子性。而我們往往考慮線程不安全的原因,會(huì)從三方面進(jìn)行考慮:就是原子性,可見性,有序性
    2022-04-04

最新評論

怀集县| 灵丘县| 南丹县| 兰州市| 荃湾区| 阿城市| 屏东市| 邮箱| 扬州市| 襄汾县| 霍林郭勒市| 新巴尔虎左旗| 宁津县| 天门市| 宣城市| 隆德县| 晋中市| 霍山县| 青州市| 乐至县| 海伦市| 昭觉县| 阳曲县| 大冶市| 侯马市| 延边| 辉南县| 杭州市| 枞阳县| 谷城县| 绥江县| 彰化县| 中宁县| 关岭| 中方县| 河源市| 中阳县| 夹江县| 抚松县| 利川市| 铜川市|