Java文件创建与写入方法汇总

Java文件创建与写入方法汇总

技术背景

在Java编程中,文件的创建与写入是常见的操作需求。例如,日志记录、数据持久化等场景都需要将数据写入文件。不同的Java版本和类库提供了多种实现方式,每种方式都有其特点和适用场景。

实现步骤

1. 创建文本文件

可以使用PrintWriter类来创建并写入文本文件:

1
2
3
4
PrintWriter writer = new PrintWriter("the-file-name.txt", "UTF-8");
writer.println("The first line");
writer.println("The second line");
writer.close();

2. 创建二进制文件

使用FileOutputStream类创建并写入二进制文件:

1
2
3
4
byte data[] = ...
FileOutputStream out = new FileOutputStream("the-file-name");
out.write(data);
out.close();

3. Java 7+ 使用 Files

创建文本文件:

1
2
3
List<String> lines = Arrays.asList("The first line", "The second line");
Path file = Paths.get("the-file-name.txt");
Files.write(file, lines, StandardCharsets.UTF_8);

创建二进制文件:

1
2
3
byte data[] = ...
Path file = Paths.get("the-file-name");
Files.write(file, data);

核心代码

1. 使用 OutputStreamWriter

1
2
3
4
Charset utf8 = StandardCharsets.UTF_8;
try (OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(new File("file.txt")), utf8)) {
writer.write("foo");
} catch (IOException e) {}

2. 使用 FileWriter

1
2
3
4
5
boolean append = false;
try(FileWriter writer = new FileWriter("file.txt", append) ){
writer.write("foo");
writer.append("bar");
} catch (IOException e) {}

3. 使用 PrintWriter

1
2
3
4
5
6
try (PrintWriter writer = new PrintWriter("file.txt", "UTF-8")) {
writer.print("foo");
writer.printf("bar %d $", "a", 1);
writer.println("baz");
} catch (FileNotFoundException e) {
} catch (UnsupportedEncodingException e) {}

4. 使用 Files.write()

1
2
3
4
5
6
Charset utf8 = StandardCharsets.UTF_8;
List<String> lines = Arrays.asList("foo", "bar");
try {
Files.write(Paths.get("file.txt"), "foo".getBytes(utf8));
Files.write(Paths.get("file2.txt"), lines, utf8);
} catch (IOException e) {}

5. 使用 Files.newBufferedWriter()

1
2
3
4
Charset utf8 = StandardCharsets.UTF_8;
try (BufferedWriter writer = Files.newBufferedWriter(Paths.get("file.txt"), utf8)) {
writer.write("foo");
} catch (IOException e) {}

最佳实践

  • 指定字符编码:在写入文件时,建议明确指定字符编码,避免出现乱码问题。例如,使用StandardCharsets.UTF_8
  • 使用 try-with-resources 语句:Java 7 引入的try-with-resources语句可以自动关闭实现了AutoCloseable接口的资源,避免手动关闭资源可能导致的错误。
  • 使用缓冲流:对于大文件的写入,使用缓冲流(如BufferedWriter)可以提高性能,减少 I/O 操作次数。

常见问题

1. IOException 异常

在文件操作过程中,可能会抛出IOException异常,例如文件不存在、没有权限等。需要使用try-catch块捕获并处理该异常。

2. 文件覆盖问题

如果文件已经存在,部分写入方法会覆盖原有文件内容。可以通过设置append参数或使用StandardOpenOption.APPEND来实现追加写入。

3. 性能问题

对于大文件的写入,不建议使用Files.write()方法,因为它没有使用缓冲,性能较低。建议使用Files.newBufferedWriter()或其他缓冲流。


Java文件创建与写入方法汇总
https://119291.xyz/posts/java-file-creation-and-writing-methods-summary/
作者
ww
发布于
2025年6月3日
许可协议