Java文件读写与异常处理从入门到实战指南

 更新时间:2026年06月01日 10:36:55   作者:小poop  
本文详细讲解Java文件输入输出与异常处理,涵盖File、Scanner、PrintWriter等类的使用,并重点介绍如何处理IOException等异常,助你写出稳健的专业Java代码,感兴趣的朋友跟随小编一起看看吧

在Java编程中,文件输入输出异常处理是两个紧密相连的核心技能。无论是读取配置文件、写入日志,还是处理用户上传的数据,都离不开对文件的操作。而文件操作中又充满了各种不确定性(文件不存在、权限不足、IO错误等),这就离不开异常处理机制。

本文将结合Java标准库中的FileScannerPrintWriter等类,系统讲解如何安全、优雅地进行文本文件的读写,并结合异常处理机制,让程序更加健壮。

一、File类:文件与目录的抽象

File类是java.io包中代表文件或目录路径的对象,它并不操作文件内容,而是用来:

  • 获取文件属性(大小、路径、是否可读写)
  • 创建、删除、重命名文件或目录
  • 判断文件是否存在、是否为目录等

示例:创建File对象

// Windows风格(注意转义)
File file1 = new File("D:\\temp\\test.txt");
// Unix风格(推荐)
File file2 = new File("D:/temp/test.txt");
// 分目录和文件名
File dir = new File("D:/myDir");
File file3 = new File(dir, "data.txt");

常用方法

方法说明
getName()获取文件名
getAbsolutePath()获取绝对路径
exists()判断是否存在
isFile() / isDirectory()判断是文件还是目录
length()获取文件大小(字节)

二、读文件:Scanner + File

Java 提供了 Scanner 类,不仅可以读取控制台输入,也可以读取文件。

步骤

  1. 创建 File 对象
  2. File 对象传给 Scanner 构造器
  3. 使用 nextLine()nextInt() 等方法读取
  4. 关闭 Scanner

示例:读取文本文件

import java.io.*;
import java.util.Scanner;
public class ReadFileDemo {
    public static void main(String[] args) throws FileNotFoundException {
        File file = new File("names.txt");
        Scanner scanner = new Scanner(file);
        while (scanner.hasNext()) {
            String line = scanner.nextLine();
            System.out.println(line);
        }
        scanner.close();
    }
}

⚠️ Scanner 构造器会抛出 FileNotFoundException,必须处理或声明。

三、写文件:PrintWriter + FileWriter

PrintWriter 类提供了 print()println() 方法,非常适合写文本文件。

基本写法(覆盖模式)

PrintWriter out = new PrintWriter("output.txt");
out.println("Hello, Java!");
out.println("File writing test.");
out.close();

追加模式

如果不想覆盖原有内容,可以使用 FileWriter 的追加构造器:

FileWriter fw = new FileWriter("output.txt", true);
PrintWriter out = new PrintWriter(fw);
out.println("这行会被追加到文件末尾");
out.close();

注意:PrintWriter 也会抛出 IOException,方法签名中需要 throws IOException

四、异常处理:让程序更安全

文件操作中常见的异常包括:

  • FileNotFoundException:文件不存在
  • IOException:读写错误
  • NumberFormatException:数据格式错误

使用 try-catch 捕获异常

try {
    File file = new File("data.txt");
    Scanner sc = new Scanner(file);
    while (sc.hasNext()) {
        System.out.println(sc.nextLine());
    }
    sc.close();
} catch (FileNotFoundException e) {
    System.out.println("文件未找到:" + e.getMessage());
}

多异常处理

try {
    // 可能抛出多种异常的代码
} catch (FileNotFoundException e) {
    System.out.println("文件不存在");
} catch (IOException e) {
    System.out.println("IO错误");
}

子类异常必须写在父类异常之前

finally 子句:无论如何都会执行

Scanner sc = null;
try {
    sc = new Scanner(new File("test.txt"));
    // 读取文件
} catch (FileNotFoundException e) {
    System.out.println("文件未找到");
} finally {
    if (sc != null) {
        sc.close(); // 保证资源被释放
    }
}

五、抛出异常:throws 与 throw

throws:声明方法可能抛出异常

public void readFile(String path) throws FileNotFoundException {
    Scanner sc = new Scanner(new File(path));
    // ...
}

throw:手动抛出异常

if (amount < 0) {
    throw new IllegalArgumentException("金额不能为负数");
}

自定义异常类

class NegativeBalanceException extends Exception {
    public NegativeBalanceException(String msg) {
        super(msg);
    }
}

六、Checked vs Unchecked 异常

类型父类是否必须处理常见例子
CheckedException(非RuntimeException)IOException, FileNotFoundException
UncheckedRuntimeException / ErrorNullPointerException, ArithmeticException

文件操作中的异常大多是 Checked Exception,必须处理或声明抛出。

七、实战:完整的文件复制程序

import java.io.*;
public class FileCopy {
    public static void main(String[] args) {
        String src = "source.txt";
        String dest = "dest.txt";
        try (BufferedReader reader = new BufferedReader(new FileReader(src));
             PrintWriter writer = new PrintWriter(new FileWriter(dest))) {
            String line;
            while ((line = reader.readLine()) != null) {
                writer.println(line);
            }
            System.out.println("复制成功");
        } catch (FileNotFoundException e) {
            System.out.println("源文件不存在");
        } catch (IOException e) {
            System.out.println("IO错误:" + e.getMessage());
        }
    }
}

✅ 这里使用了 try-with-resources(Java 7+),自动关闭资源,更加简洁安全。

总结

  • File 类操作文件路径和属性
  • Scanner + File 读文本文件
  • PrintWriter + FileWriter 写文本文件
  • 文件操作必须处理 IOException 等 checked 异常
  • 使用 try-catch-finallytry-with-resources 保证资源释放
  • 区分 checked 和 unchecked 异常,合理设计异常处理策略

掌握文件读写与异常处理,是走向Java实战开发的重要一步。希望这篇文章能帮助你写出更稳健、更专业的Java代码。

到此这篇关于Java文件读写与异常处理从入门到实战指南的文章就介绍到这了,更多相关Java文件读写与异常处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java面试题冲刺第二十五天--并发编程3

    Java面试题冲刺第二十五天--并发编程3

    这篇文章主要为大家分享了最有价值的三道关于并发编程的面试题,涵盖内容全面,包括数据结构和算法相关的题目、经典面试编程题等,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Java使用ShardingSphere实现数据库分片的策略指南

    Java使用ShardingSphere实现数据库分片的策略指南

    随着业务数据量的爆炸式增长,数据库分片作为解决大数据量存储和查询性能问题的核心技术,已成为现代分布式系统架构的重要组成部分,ShardingSphere作为一套开源的分布式数据库解决方案,提供了强大的数据分片功能,本文将深入探讨ShardingSphere的核心分片策略
    2025-08-08
  • java生成图片进行套打功能

    java生成图片进行套打功能

    这篇文章主要为大家详细介绍了java生成图片进行套打功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • 基于Java实现QQ邮箱发送工具类

    基于Java实现QQ邮箱发送工具类

    我们在日常开发中,需要实现一个对邮箱的发送,今天就实现邮箱的发送工具类,只需要一些注册邮箱之后的配置即可,感兴趣的小伙伴可以了解下
    2023-12-12
  • Java泛型与数据库应用实例详解

    Java泛型与数据库应用实例详解

    这篇文章主要介绍了Java泛型与数据库应用,结合实例形式详细分析了java继承泛型类实现增删改查操作相关实现技巧,需要的朋友可以参考下
    2019-08-08
  • Java实现Excel数据验证功能

    Java实现Excel数据验证功能

    在Java中,开发者可以使用一些开源的库(如Apache POI)来添加、修改和处理Excel中的数据,下面我们就来看看如何使用Java实现添加,修改和删除Excel数据验证吧
    2023-10-10
  • 详解Spring Boot 配置多个RabbitMQ

    详解Spring Boot 配置多个RabbitMQ

    本篇文章主要介绍了Spring Boot 配置多个RabbitMQ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • Spring Boot Reactor 整合 Resilience4j详析

    Spring Boot Reactor 整合 Resilience4j详析

    这篇文章主要介绍了Spring Boot Reactor整合Resilience4j详析,文章通过引入pom包展开详细介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下
    2022-09-09
  • IDEA的spring项目使用@Qualifier飘红问题及解决

    IDEA的spring项目使用@Qualifier飘红问题及解决

    这篇文章主要介绍了IDEA的spring项目使用@Qualifier飘红问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • SpringBoot多环境日志配置方式

    SpringBoot多环境日志配置方式

    SpringBoot 默认使用LogBack日志系统,默认情况下,SpringBoot项目的日志只会在控制台输入,本文给大家介绍SpringBoot多环境日志配置方式,需要的朋友可以参考下
    2024-08-08

最新评论