在java中有许多的方式可以建立文件写文件,你是否真的认真的总结过?下面笔者就帮人人总结一下java中建立文件的五种方式。

  1. Files.newBufferedWriter(Java 8)

  2. Files.write(Java 7 推荐)

  3. PrintWriter

  4. File.createNewFile

  5. FileOutputStream.write(byte[] b) 管道流

实际上不只这5种,通过管道流的排列组合,其实有更多种,然则笔者总结的这五种可以说是最常用及最佳实践,

条件小知识

以前我在写技术文章涉及到“流关闭”、“毗邻关闭”的时刻,经常有人留言:“还写技术文章,写个流都不知道close()”,这种留言我遇到过无数回!

在本文中大量的使用到了try-with-resources语法,这个语法真的是良久的了,然则简直另有小伙伴不知道(知道的小伙伴就略过吧)。我照样说一下,下文中的管道流不是我没close,是自动关闭close的。

try(管道流、毗邻等实现了Closeable接口的类){ 
    //这里使用类工具操作 
} 
//用try()包罗起来,就不用在finally内里自己手动的去 Object.close()了,会自动的关闭

1. Java 8 Files.newBufferedWriter

java8 提供的newBufferedWriter可以建立文件,并向文件内写入数据。可以通过追加写模式,向文件内追加内容。

@Test 
void testCreateFile1() throws IOException { 
   String fileName = "D:\\data\\test\\newFile.txt"; 
 
   Path path = Paths.get(fileName); 
   // 使用newBufferedWriter建立文件并写文件 
   // 这里使用了try-with-resources方式来关闭流,不用手动关闭 
   try (BufferedWriter writer = 
                   Files.newBufferedWriter(path, StandardCharsets.UTF_8)) { 
      writer.write("Hello World -建立文件!!"); 
   } 
 
   //追加写模式 
   try (BufferedWriter writer = 
                Files.newBufferedWriter(path, 
                        StandardCharsets.UTF_8, 
                        StandardOpenOption.APPEND)){ 
       writer.write("Hello World -字母哥!!"); 
   } 
}

2. Java 7 Files.write

下面的这种方式Files.write,是笔者推荐的方式,语法简朴,而且底层是使用Java NIO实现的。同样提供追加写模式向已经存在的文件种追加数据。这种方式是实现文本文件简朴读写最方便快捷的方式。

@Test 
void testCreateFile2() throws IOException { 
   String fileName = "D:\\data\\test\\newFile2.txt"; 
 
   // 从JDK1.7最先提供的方式 
   // 使用Files.write建立一个文件并写入 
   Files.write(Paths.get(fileName), 
               "Hello World -建立文件!!".getBytes(StandardCharsets.UTF_8)); 
 
   // 追加写模式 
   Files.write( 
         Paths.get(fileName), 
         "Hello World -字母哥!!".getBytes(StandardCharsets.UTF_8), 
         StandardOpenOption.APPEND); 
}

3. PrintWriter

PrintWriter是一个对照古老的文件建立及写入方式,从JDK1.5就已经存在了,对照有特点的是:PrintWriter的println方式,可以实现一行一行的写文件。

,

联博统计

www.u-healer.com采用以太坊区块链高度哈希值作为统计数据,联博以太坊统计数据开源、公平、无任何作弊可能性。联博统计免费提供API接口,支持多语言接入。

,
@Test 
void testCreateFile3() throws IOException { 
   String fileName = "D:\\data\\test\\newFile3.txt"; 
 
   // JSD 1.5最先就已经存在的方式 
   try (PrintWriter writer = new PrintWriter(fileName, "UTF-8")) { 
      writer.println("Hello World -建立文件!!"); 
      writer.println("Hello World -字母哥!!"); 
   } 
 
   // Java 10进行了改善,支持使用StandardCharsets指定字符集 
   /*try (PrintWriter writer = new PrintWriter(fileName, StandardCharsets.UTF_8)) { 
 
      writer.println("first line!"); 
      writer.println("second line!"); 
 
   } */ 
 
}

4. File.createNewFile()

createNewFile()方式的功效相对就对照纯粹,只是建立文件不做文件写入操作。 返回true示意文件乐成,返回 false示意文件已经存在.可以配合FileWriter 来完成文件的写操作。

@Test 
void testCreateFile4() throws IOException { 
   String fileName = "D:\\data\\test\\newFile4.txt"; 
 
   File file = new File(fileName); 
 
   // 返回true示意文件乐成 
   // false 示意文件已经存在 
   if (file.createNewFile()) { 
      System.out.println("建立文件乐成!"); 
   } else { 
      System.out.println("文件已经存在不需要重复建立"); 
   } 
 
   // 使用FileWriter写文件 
   try (FileWriter writer = new FileWriter(file)) { 
      writer.write("Hello World -建立文件!!"); 
   } 
 
}

5.最原始的管道流方式

最原始的方式就是使用管道流嵌套的方式,然则笔者以为这种方式历久弥新,使用起来异常天真。你想去加上Buffer缓冲,你就嵌套一个BufferedWriter,你想去向文件中写java工具你就嵌套一个ObjectOutputStream。但归根结底要用到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 -建立文件!!"); 
      bw.flush(); 
   } 
}

作者:zimug

链接:https://juejin.im/post/6865808689115185160

泉源:掘金

【编辑推荐】

  1. 总结Java中建立并写文件的5种方式

  2. “码”海钩沉:面向Java开发人员的十佳GitHub储存库

  3. Java平安编码之SQL注入

  4. JavaScript中的String Pad

  5. 设计一个JavaScript插件系统,编程头脑比死磕API更主要

【责任编辑:武晓燕 TEL:(010)68476606】