Java 创建和写入文件

在 Java 中有多种创建写入数据到文件的方式。

  1. Files.write 创建写入数据到文件(JDK 7)
  2. Files.writeString 创建写入数据到文件(JDK11)
  3. BufferedWriter 创建写入数据到文件

Files.write ⭐️

从 Java 7 开始,新增了 Files 类,其中的 write 方法可以方便的创建写入文件。

String content = "www.wdbyte.com, java 7";
Path path = Paths.get("/Users/darcy/wdbyte/test1.txt");
// string -> bytes
Files.write(path, content.getBytes(StandardCharsets.UTF_8));

查看文件:

➜ pwd
/Users/darcy/wdbyte
➜ cat test1.txt
www.wdbyte.com, java 7

运行两次,文件内容会被覆盖,结果不变。

使用 StandardOpenOption.APPEND 定义追加模式

String content = "www.wdbyte.com,java 7" + System.lineSeparator();
Path path = Paths.get("/Users/darcy/wdbyte/test2.txt");
Files.write(path, content.getBytes(StandardCharsets.UTF_8), StandardOpenOption.CREATE,
    StandardOpenOption.APPEND);
Files.write(path, content.getBytes(StandardCharsets.UTF_8), StandardOpenOption.CREATE,
    StandardOpenOption.APPEND);

查看文件:

➜ cat test2.txt
www.wdbyte.com,java 7
www.wdbyte.com,java 7

Files.write 也可以直接写入 List 内容到文件,每个元素一行。

List<String> dataList = Arrays.asList("www", "wdbyte", "com", "java 7");
Path path = Paths.get("/Users/darcy/wdbyte/test3.txt");
Files.write(path, dataList);

查看文件:

➜ cat test3.txt
www
wdbyte
com
java 7

Files.writeString

Java 11 开始,Files 类新增了 writeString 方法,可以直接把字符串写入文件而不用 getBytes

Path path = Paths.get("/Users/darcy/wdbyte/test5.txt");
Files.writeString(path, "www.wdbyte.com,java 11");

BufferedWriter

Java 7 之前,通过 BufferedWriter 写入数据到文件的方式。

String content = "www.wdbyte.com,java 7";
String filePath = "/Users/darcy/wdbyte/test0.txt";
try (FileWriter fw = new FileWriter(filePath);
     BufferedWriter bw = new BufferedWriter(fw)) {
    bw.write(content);
    bw.newLine();
}

//  追加模式
try (FileWriter fw = new FileWriter(filePath, true);
     BufferedWriter bw = new BufferedWriter(fw)) {
    bw.write(content);
    bw.newLine();
}

查看结果:

➜ cat test0.txt
www.wdbyte.com,java 7
www.wdbyte.com,java 7

Java 7 开始,也可以通过 Files 获取 BufferedWriter.

String content = "www.wdbyte.com,java 7";
Path path = Paths.get("/Users/darcy/wdbyte/test4.txt");
// 默认 utf_8
try (BufferedWriter bw = Files.newBufferedWriter(path)) {
    bw.write(content);
    bw.newLine();
}
//  追加模式
try (BufferedWriter bw = Files.newBufferedWriter(path,
    StandardOpenOption.CREATE, StandardOpenOption.APPEND)) {
    bw.write(content);
    bw.newLine();
}

查看结果:

➜ cat test4.txt
www.wdbyte.com,java 7
www.wdbyte.com,java 7

一如既往,文章中代码存放在 Github.com/niumoo/javaNotes.