一、先记住 4 句核心口诀
- 读文件 = 输入流(InputStream / Reader)
- 写文件 = 输出流(OutputStream / Writer)
- 图片 / 视频 / 音频 = 字节流(万能)
- 文本文件 = 字符流(防乱码)
二、必备基础:File 类(操作文件本身)
先学会创建、判断、删除文件
java
运行
import java.io.File;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) throws IOException {
File file = new File("test.txt");
System.out.println("是否存在:" + file.exists());
System.out.println("文件名:" + file.getName());
System.out.println("文件大小:" + file.length());
// 创建文件
if (!file.exists()) {
file.createNewFile();
System.out.println("文件已创建");
}
// 删除文件
// file.delete();
}
}
三、最常用:字节流(复制一切文件)
适合:图片、视频、音频、压缩包、文本
1. 文件读取
java
运行
import java.io.FileInputStream;
import java.io.IOException;
public class ReadByte {
public static void main(String[] args) {
try (FileInputStream fis = new FileInputStream("test.txt")) {
byte[] buffer = new byte[1024];
int len;
// 循环读取
while ((len = fis.read(buffer)) != -1) {
String s = new String(buffer, 0, len);
System.out.println(s);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
2. 文件写入
java
运行
import java.io.FileOutputStream;
import java.io.IOException;
public class WriteByte {
public static void main(String[] args) {
try (FileOutputStream fos = new FileOutputStream("out.txt")) {
String str = "Java IO 测试写入";
fos.write(str.getBytes());
System.out.println("写入成功");
} catch (IOException e) {
e.printStackTrace();
}
}
}
3. 文件复制(最标准写法)
任何文件都能复制,开发必背!
java
运行
import java.io.*;
public class CopyFile {
public static void main(String[] args) {
try (
BufferedInputStream in = new BufferedInputStream(new FileInputStream("原图.png"));
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("新图.png"))
) {
byte[] buffer = new byte[8192];
int len;
while ((len = in.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
System.out.println("复制完成!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
四、文本专用:字符流(不乱码)
适合:.txt/.java/.html 等纯文本
1. 按行读取文本(超级常用)
java
运行
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class ReadText {
public static void main(String[] args) {
try (BufferedReader br = new BufferedReader(new FileReader("test.txt"))) {
String line;
// 一行一行读
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
2. 按行写入文本
java
运行
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class WriteText {
public static void main(String[] args) {
try (BufferedWriter bw = new BufferedWriter(new FileWriter("text_out.txt"))) {
bw.write("第一行内容");
bw.newLine(); // 换行
bw.write("第二行内容");
System.out.println("写入完成");
} catch (IOException e) {
e.printStackTrace();
}
}
}
五、解决中文乱码:指定编码
java
运行
import java.io.*;
public class EncodingDemo {
public static void main(String[] args) {
try (
InputStreamReader isr = new InputStreamReader(new FileInputStream("test.txt"), "UTF-8");
BufferedReader br = new BufferedReader(isr)
) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
六、必须掌握:自动关闭流(JDK7+)
所有流都推荐这样写:自动关闭,不占内存
java
运行
try (创建流) {
// 读写操作
} catch (IOException e) {
e.printStackTrace();
}
七、快速选择用哪个流
表格
| 需求 | 流选择 |
|---|---|
| 读取图片 / 视频 | BufferedInputStream |
| 写入图片 / 视频 | BufferedOutputStream |
| 读取文本 | BufferedReader |
| 写入文本 | BufferedWriter |
| 复制文件 | 字节缓冲流 |
| 解决乱码 | InputStreamReader |
八、一句话总结
- 读 = 输入流
- 写 = 输出流
- 二进制文件 = 字节流
- 文本文件 = 字符流
- 高效 = 缓冲流
- 安全关闭 = try-with-resources
如果你需要,我可以给你:
- IO 流全套练习题 + 答案
- 面试常考 IO 题总结
- 把这些代码整理成一份可直接运行的完整项目