在 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.路径常见坑(重点)

  1. 单写 \ 一定会报错,必须写 \\
  2. 相对路径找不到文件 → 检查是否放在项目根目录
  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 个坑

  1. mkdir () 与 mkdirs () 区别

    mkdir() 只能创建一级目录(如 a),创建多级目录(a/b/c)会失败;必须用 mkdirs() 创建嵌套目录。

  2. 文件删除失败

    如果文件被 IO 流占用未关闭,delete() 会直接返回 false,删除无效。

  3. 路径分隔符问题

    Windows 用 \,Linux/Mac 用 /,Java 中 \ 是转义字符,推荐写法:

    // 跨平台通用写法 
    File file = new File("a" + File.separator + "test.txt");
    

三、IO 流核心概念

1. 什么是 IO 流?

![[Pasted image 20260526205520.png]]

IO(Input/Output)流:数据在内存与硬盘 / 网络之间传输的通道,像水流一样传输数据。

  • 输入流(Input):数据从硬盘 → 内存(读取文件)
  • 输出流(Output):数据从内存 → 硬盘(写入文件)

2. IO 流两大分类

1)按数据类型分
  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();
	}
  1. 字符流Reader(输入)、Writer(输出)

    • 传输单位:字符(2 byte)
    • 适用场景:纯文本文件(.txt/.java/.md),专门解决中文乱码问题
(2)体系总结
  • 字节流基类:InputStreamOutputStream(万能流)
  • 字符流基类:ReaderWriter(纯文本专用)

更多推荐