在日常开发中,经常需要把一些数据保存下来,比如用户填写的表单、程序运行的日志,或者配置信息。这时候,Java 的文件读写功能就派上用场了。它就像一个“记事本助手”,帮你把数据写进电脑里的文件,也能随时读出来查看。
为什么需要文件读写?
想象一下你在写一个记账小程序,每次花多少钱都输入进去。如果关掉程序后数据就没了,那下次打开还得重新记,显然不现实。通过 Java 文件读写,可以把每一笔支出存到一个文本文件里,下次打开程序时再读出来,账目就能持续保存。
使用 FileWriter 写入文本
最简单的写入方式是用 FileWriter。它适合写字符内容,比如一段文字或日志信息。
import java.io.FileWriter;
import java.io.IOException;
public class WriteDemo {
public static void main(String[] args) {
try (FileWriter writer = new FileWriter("note.txt")) {
writer.write("今天花了25元买早餐\n");
writer.write("下午充值话费100元");
} catch (IOException e) {
System.out.println("写入失败:" + e.getMessage());
}
}
}
这段代码会在项目目录下生成一个叫 note.txt 的文件,里面写着两条消费记录。注意用了 try-with-resources,这样即使出错,文件也会自动关闭,避免资源泄露。
用 FileReader 读取内容
写进去之后,自然要能读出来。用 FileReader 可以把文件里的文字原样读取。
import java.io.FileReader;
import java.io.IOException;
public class ReadDemo {
public static void main(String[] args) {
try (FileReader reader = new FileReader("note.txt")) {
int ch;
while ((ch = reader.read()) != -1) {
System.out.print((char) ch);
}
} catch (IOException e) {
System.out.println("读取失败:" + e.getMessage());
}
}
}
这段代码会逐个字符读取文件并打印出来。虽然能工作,但效率不高。更常用的是配合 BufferedReader 按行读取。
按行读写更方便
大多数时候,我们习惯一行一条记录。用 BufferedWriter 和 BufferedReader 能让操作更高效。
import java.io.*;
public class LineIO {
public static void main(String[] args) {
// 写入多行
try (BufferedWriter writer = new BufferedWriter(new FileWriter("tasks.txt"))) {
writer.write("完成日报");
writer.newLine();
writer.write("提交周报");
} catch (IOException e) {
e.printStackTrace();
}
// 读取多行
try (BufferedReader reader = new BufferedReader(new FileReader("tasks.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println("- " + line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
这里用 newLine() 换行,读的时候用 readLine() 一次读一整行,处理日志、配置、列表类数据特别顺手。
二进制文件怎么处理?
上面都是处理文本,如果是图片、音频或者压缩包这类非文本文件,就得用字节流。Java 提供了 FileInputStream 和 FileOutputStream。
import java.io.*;
public class CopyFile {
public static void main(String[] args) {
try (FileInputStream in = new FileInputStream("photo.jpg");
FileOutputStream out = new FileOutputStream("copy.jpg")) {
byte[] buffer = new byte[1024];
int length;
while ((length = in.read(buffer)) > 0) {
out.write(buffer, 0, length);
}
} catch (IOException e) {
System.out.println("复制失败:" + e.getMessage());
}
}
}
这段代码实现了一个简易的文件复制功能。它把原图按块读取,再写入新文件,适用于任何类型的文件。
掌握这些基本操作后,你就能让程序“记住”数据,不再每次运行都从零开始。无论是保存用户设置,还是生成日志报告,Java 文件读写都是绕不开的基础技能。