📝 Java 文件 IO 入门教程
哎呀,Java 文件 IO 啊,这玩意儿听起来高大上,其实就是让程序跟文件打交道 ------ 读读写写啥的。咱今天就用大白话唠明白这事儿。😉
想象一下,你电脑里的文件就像一个个小本本📒。Java 程序呢,就像个小秘书👩💼。文件 IO 就是这个小秘书去拿小本本(读文件)、写小本本(写文件)的过程。
File对象
首先,你得告诉小秘书小本本在哪儿吧?这就需要一个 "地址",在 Java 里叫 "File 对象"。就像你告诉秘书:"去我桌子上那个《工作计划》笔记本" 一样。📍
arduino
// 告诉程序文件在哪儿
File file = new File("C:/我的小本本.txt");

字符流
接下来是读文件。最简单的办法是用 "BufferedReader",这玩意儿就像给小秘书配了个放大镜🔍,读起来又快又清楚。
arduino
try {
// 给小秘书配个放大镜
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
// 一行一行读,直到读完
while ((line = br.readLine()) != null) {
System.out.println(line); // 打印读到的内容
}
br.close(); // 用完了记得把小本本合上
} catch (IOException e) {
e.printStackTrace(); // 出问题了就喊一声
}
然后是写文件,用 "BufferedWriter" 就行,这就像给小秘书一支好写的笔✍️。
scss
try {
// 给小秘书一支笔
BufferedWriter bw = new BufferedWriter(new FileWriter(file));
bw.write("今天天气真好"); // 写点东西
bw.newLine(); // 换行,就像你敲回车
bw.write("适合学Java");
bw.close(); // 写完也得合上
} catch (IOException e) {
e.printStackTrace();
}
是不是挺简单?就像平时拿本子写字、看字一样。不过有几点要注意:⚠️
- 操作完文件一定要 "关闭",就像看完书要合上一样,不然电脑会累着💻。
- 这些操作可能会出岔子(比如文件找不到),所以得用 try...catch 包起来,出问题了好处理🔧。
- 现在 Java 有更简单的写法,不用手动关文件,就像用自动关门的本子🚪:
arduino
// 自动关门的写法,推荐用这个
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
字节流
除了上面说的字符流,Java 里还有字节流,它就像用小勺子🥄一点点处理文件里的内容,不管是文本还是图片、音频这些二进制文件都能搞定。比如 FileInputStream 和 FileOutputStream,前者是读字节,后者是写字节。
java
// 用字节流读文件
try (FileInputStream fis = new FileInputStream("C:/图片.jpg")) {
byte[] buffer = new byte[1024]; // 准备个小桶接字节
int len;
while ((len = fis.read(buffer)) != -1) {
// 处理读到的字节,这里只是举个例子
}
} catch (IOException e) {
e.printStackTrace();
}
// 用字节流写文件
try (FileOutputStream fos = new FileOutputStream("C:/复制的图片.jpg")) {
byte[] data = "一些字节数据".getBytes(); // 把内容转成字节数组
fos.write(data); // 把字节写到文件里
} catch (IOException e) {
e.printStackTrace();
}
还有转换流,它就像个翻译官🌐,能在字节流和字符流之间转换。当你用字节流读文本,想按字符处理时,InputStreamReader 就派上用场了;要是想把字符流的内容用字节流写出去,OutputStreamWriter 就很管用。
csharp
// 字节流转字符流读文件
try (InputStreamReader isr = new InputStreamReader(new FileInputStream("C:/文档.txt"), "UTF-8")) {
int c;
while ((c = isr.read()) != -1) {
System.out.print((char) c); // 把读到的字节转成字符输出
}
} catch (IOException e) {
e.printStackTrace();
}
还有一种叫 DataInputStream 和 DataOutputStream 的流,它们就像带了标签机🏷️,能按特定的数据类型读写字节,比如读个整数、写个浮点数啥的,不用自己手动转换格式,很方便。
java
// 用DataOutputStream写各种类型数据
try (DataOutputStream dos = new DataOutputStream(new FileOutputStream("C:/数据.dat"))) {
dos.writeInt(123); // 写个整数
dos.writeDouble(3.14); // 写个小数
dos.writeUTF("Hello"); // 写个字符串
} catch (IOException e) {
e.printStackTrace();
}
// 用DataInputStream读对应类型数据
try (DataInputStream dis = new DataInputStream(new FileInputStream("C:/数据.dat"))) {
int num = dis.readInt();
double d = dis.readDouble();
String str = dis.readUTF();
System.out.println(num + " " + d + " " + str);
} catch (IOException e) {
e.printStackTrace();
}
刚开始学不用记太多复杂的,先把这几种最基本的读和写搞明白。多试试读个 txt 文件,写点内容进去,慢慢就熟啦。就像刚开始学用记事本一样,练多了自然就顺手了~💪