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 流?
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(纯文本专用)
