Java 文件操作与 IO 流入门:从基础到实战,新手必看全攻略
·
在 Java 开发中,文件操作和 IO 流是处理本地文件、数据读写的核心技术,也是新手入门最容易踩坑的知识点。从零梳理文件操作的基础用法、IO 流的分类与实战,帮你彻底搞定 Java 文件 IO。
一,先搞懂:Java 中的文件路径(必学!)
Java 操作文件第一步必须写对路径,路径错了直接报 FileNotFoundException。
1. 两种路径:绝对路径 vs 相对路径
绝对路径:
从根目录开始写的完整路径,唯一指向一个文件。
- Windows:
D:\\project\\test.txt - Linux/Mac:
/home/user/test.txt
相对路径:
相对于当前项目根目录的路径(最常用)。
- 写法:
test.txt - 含义:项目根目录下的 test.txt 文件
2.路径分隔符(跨平台必看)
- Windows 用
\ - Linux/Mac 用
/ - Java 中
\是转义字符,必须写\\
✅ 最安全、跨平台写法:
// 自动适配 Windows/Linux/Mac,永远不报错!
String path = File.separator + "project" + File.separator + "test.txt";
File file = new File(path);
3.路径常见坑(重点)
- 单写
\一定会报错,必须写\\ - 相对路径找不到文件 → 检查是否放在项目根目录
- 路径带中文 → 建议全英文路径,避免编码问题
二,Java 文件操作基础(File 类)
java.io.File 类是 Java 中用于操作文件 / 目录的核心类,它不负责读写数据,只负责对文件 / 目录进行创建、删除、查询、遍历等管理操作。
1.核心常用方法
// 1. 创建 File 对象(路径可以是文件,也可以是目录)
File file = new File("test.txt");
File dir = new File("myFolder");
// 2. 判断方法
file.exists(); // 判断文件/目录是否存在
file.isFile(); // 判断是否是文件
file.isDirectory(); // 判断是否是目录
// 3. 创建方法
file.createNewFile();// 创建空文件(抛出 IOException)
dir.mkdir(); // 创建<单级目录>
dir.mkdirs(); // 创建<多级目录>(推荐!)
// 4. 删除方法
file.delete(); // 删除文件/空目录
## 2. 新手必踩的 3 个坑
-
mkdir () 与 mkdirs () 区别
mkdir()只能创建一级目录(如a),创建多级目录(a/b/c)会失败;必须用mkdirs()创建嵌套目录。 -
文件删除失败
如果文件被 IO 流占用未关闭,
delete()会直接返回false,删除无效。 -
路径分隔符问题
Windows 用
\,Linux/Mac 用/,Java 中\是转义字符,推荐写法:// 跨平台通用写法 File file = new File("a" + File.separator + "test.txt");
三、IO 流核心概念
1. 什么是 IO 流?
![![[Pasted image 20260526205520.png]]](https://i-blog.csdnimg.cn/direct/cf135f7c66104412bbede47a7a94adee.png)
IO(Input/Output)流:数据在内存与硬盘 / 网络之间传输的通道,像水流一样传输数据。
- 输入流(Input):数据从硬盘 → 内存(读取文件)
- 输出流(Output):数据从内存 → 硬盘(写入文件)
2. IO 流两大分类
1)按数据类型分
-
字节流:
InputStream(输入)、OutputStream(输出)- 传输单位:字节(8 bit)
- 适用场景:所有文件(图片、视频、音频、文本等)
字节流是 Java IO 的基础,能处理任何类型文件,是开发中最常用的流。
文件字节输入流(FileInputStream):读取文件
public static void readFileByByte() throws IOException {
// 1. 创建流对象
FileInputStream fis = new FileInputStream("test.txt");
// 2. 读取数据(单个字节读取)
int b;
while ((b = fis.read()) != -1) {
// read() 读到末尾返回 -1
System.out.print((char) b);
}
// 3. 关闭流(必须!释放资源)
fis.close();
}
文件字节输出流(FileOutputStream):写入文件
public static void writeFile() throws IOException {
// 第二个参数 true:追加写入,false/不写:覆盖写入
FileOutputStream fos = new FileOutputStream("test.txt", true);
// 写入字节数据
fos.write("Hello Java IO!\n".getBytes());
fos.write("你好,文件操作".getBytes());
fos.close();
}
-
字符流:
Reader(输入)、Writer(输出)- 传输单位:字符(2 byte)
- 适用场景:纯文本文件(.txt/.java/.md),专门解决中文乱码问题
(2)体系总结
- 字节流基类:
InputStream、OutputStream(万能流) - 字符流基类:
Reader、Writer(纯文本专用)
更多推荐
所有评论(0)