【JavaEE初阶】告别小白!Java IO 流读写 + 文件操作实战

【JavaEE初阶】告别小白!Java IO 流读写 + 文件操作实战

Java IO 是 JavaEE 开发的基础核心,掌握它就能轻松处理文件读写、网络数据传输等操作。本指南针对初学者,从零开始讲解 File 类文件操作IO 流读写,重点结合实战示例,帮助你快速上手。基于 Java 8+ 版本,所有代码示例均可直接运行。

为了直观理解,我们先来看 Java IO 流的类层次结构图:

1. File 类:文件和目录操作基础

java.io.File 类用于表示文件或目录的路径,可以进行创建、删除、重命名、判断等操作(不涉及文件内容读写)。

常用方法

  • createNewFile():创建新文件
  • mkdir() / mkdirs():创建目录(mkdirs 可递归创建)
  • delete():删除文件或空目录
  • exists():判断是否存在
  • isFile() / isDirectory():判断是文件还是目录
  • listFiles():列出目录下所有文件

实战示例:创建目录、文件并遍历

import java.io.File;
import java.io.IOException;

public class FileDemo {
    public static void main(String[] args) throws IOException {
        // 创建 File 对象(路径可相对或绝对)
        File dir = new File("test/dir/subdir");
        if (!dir.exists()) {
            dir.mkdirs();  // 递归创建目录
            System.out.println("目录创建成功: " + dir.getAbsolutePath());
        }

        File file = new File(dir, "hello.txt");
        if (file.createNewFile()) {
            System.out.println("文件创建成功: " + file.getAbsolutePath());
        }

        // 遍历目录
        File[] files = dir.getParentFile().listFiles();
        if (files != null) {
            for (File f : files) {
                System.out.println((f.isDirectory() ? "目录: " : "文件: ") + f.getName());
            }
        }

        // 删除测试文件和目录(注释掉以保留)
        // file.delete();
        // dir.delete();
    }
}

运行结果示例
目录创建成功: /path/to/test/dir/subdir
文件创建成功: /path/to/test/dir/subdir/hello.txt
…(列出文件)

2. IO 流基础:字节流 vs 字符流

  • 字节流(InputStream/OutputStream):处理所有类型文件(文本、图片、视频),以字节为单位。适合二进制数据。
  • 字符流(Reader/Writer):专门处理文本文件,以字符为单位(自动处理编码)。不适合非文本文件。

推荐:文本文件用字符流 + 缓冲流;非文本用字节流 + 缓冲流。

3. 字节流实战:文件复制(适合任意文件,如图片)

基本字节流(FileInputStream / FileOutputStream)

import java.io.*;

public class ByteCopy {
    public static void main(String[] args) throws IOException {
        File src = new File("src.jpg");  // 源文件(图片)
        File dest = new File("dest.jpg"); // 目标文件

        try (InputStream is = new FileInputStream(src);
             OutputStream os = new FileOutputStream(dest)) {
            byte[] buffer = new byte[1024];  // 缓冲数组,提高效率
            int len;
            while ((len = is.read(buffer)) != -1) {
                os.write(buffer, 0, len);
            }
        }
        System.out.println("字节流复制完成!");
    }
}

缓冲字节流(高效推荐)

import java.io.*;

public class BufferedByteCopy {
    public static void main(String[] args) throws IOException {
        File src = new File("src.jpg");
        File dest = new File("dest_buffered.jpg");

        try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(src));
             BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(dest))) {
            byte[] buffer = new byte[1024];
            int len;
            while ((len = bis.read(buffer)) != -1) {
                bos.write(buffer, 0, len);
            }
        }
        System.out.println("缓冲字节流复制完成(更快)!");
    }
}

4. 字符流实战:文本文件读写(推荐 BufferedReader/Writer)

基本字符流(FileReader / FileWriter)

import java.io.*;

public class CharReadWrite {
    public static void main(String[] args) throws IOException {
        try (Reader reader = new FileReader("input.txt");
             Writer writer = new FileWriter("output.txt")) {
            char[] buffer = new char[1024];
            int len;
            while ((len = reader.read(buffer)) != -1) {
                writer.write(buffer, 0, len);
            }
        }
        System.out.println("字符流复制文本完成!");
    }
}

缓冲字符流(高效 + 按行读取,强烈推荐)

import java.io.*;

public class BufferedCharDemo {
    public static void main(String[] args) throws IOException {
        try (BufferedReader br = new BufferedReader(new FileReader("input.txt"));
             BufferedWriter bw = new BufferedWriter(new FileWriter("output_buffered.txt"))) {
            String line;
            while ((line = br.readLine()) != null) {
                bw.write(line);
                bw.newLine();  // 换行
            }
        }
        System.out.println("缓冲字符流按行复制完成(最常用)!");
    }
}

注意:字符流适合纯文本,避免乱码。写入后记得 flush() 或关闭流。

5. 最佳实践与注意事项

  • 始终使用 try-with-resources:自动关闭流,避免资源泄漏。
  • 缓冲流优先:大幅提升性能(减少磁盘 IO)。
  • 异常处理:IO 操作必抛 IOException。
  • Java 7+ NIO 简介:对于高并发,推荐 java.nio(非阻塞、通道+缓冲区),但初阶先掌握传统 IO。
  • 常见错误:忘记关闭流、用字符流复制图片导致损坏。

总结与进阶

通过这些实战,你已掌握 Java IO 的核心:File 操作 + 字节/字符流读写 + 文件复制。练习建议:实现一个“文件拷贝工具”支持拖拽路径。

进一步学习:序列化(ObjectInput/OutputStream)、NIO.2(Paths/Files)、网络 IO(Socket)。

多敲代码,实战出真知!如果需要更多示例(如递归遍历目录、异常日志),随时提问。加油,告别小白!🚀

文章已创建 3707

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部