当前位置:

首页 > 编程开发 > Java文件读写与异常处理从入门到实战指南

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

要说Ja va里哪两个技能最常打包出现,文件读写和异常处理肯定算一对儿。日常开发里,读个配置文件、写个日志、处理用户上传的数据,哪样都离不开文件操作。但文件操作这事,变数实在太多——文件可能不存在、权限不够、IO设备突然罢工……这时候,没有异常处理机制兜底,程序分分钟崩给你看。 这篇文章会结合Ja

本文目录

    要说Ja va里哪两个技能最常打包出现,文件读写和异常处理肯定算一对儿。日常开发里,读个配置文件、写个日志、处理用户上传的数据,哪样都离不开文件操作。但文件操作这事,变数实在太多——文件可能不存在、权限不够、IO设备突然罢工……这时候,没有异常处理机制兜底,程序分分钟崩给你看。

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

    这篇文章会结合Ja va标准库里的File、Scanner、PrintWriter这些常用类,系统讲讲怎么安全又优雅地读写文本文件,同时把异常处理机制揉进去,让代码真正健壮起来。

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

    File类是ja va.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

    Scanner这个类,大家平时可能更习惯用它读控制台输入。但它的能力远不止于此——拿来读文件同样顺手。

    步骤

    1. 创建一个 File 对象
    2. 把 File 对象传给 Scanner 的构造器
    3. 用 nextLine()、nextInt() 等方法逐行或按类型读取
    4. 用完记得关闭 Scanner

    示例:读取文本文件

    import ja va.io.*;
    import ja va.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,要么用try-catch兜住,要么在方法签名上声明。

    三、写文件:PrintWriter + FileWriter

    写文件方面,PrintWriter 是首选之一。print() 和 println() 用起来就跟往控制台打印一样自然。

    基本写法(覆盖模式)

    PrintWriter out = new PrintWriter("output.txt");
    out.println("Hello, Ja va!");
    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:数据格式不对(比如想把"abc"转成数字)

    使用 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 / Error否NullPointerException, ArithmeticException

    文件操作中遇到的异常,大多数是 Checked Exception,不能视而不见,必须处理或声明抛出。

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

    来一个完整的文件复制示例,把前面说的知识点串起来:

    import ja va.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(Ja va 7+ 引入),资源会在try块结束后自动关闭,比手动在finally里写sc.close()更简洁也更安全。

    总结

    • File 类负责文件路径和属性,不碰内容
    • Scanner + File 是读文本文件的好搭配
    • PrintWriter + FileWriter 写文本文件,支持追加或覆盖
    • 文件操作必须对 IOException 等 checked 异常有交代
    • 用 try-catch-finally 或 try-with-resources 确保资源释放
    • 区分 checked 和 unchecked 异常,设计合理的异常处理策略

    掌握文件读写与异常处理,算是跨入Ja va实战开发的一道重要门槛。希望这篇文章能帮你在实际项目中写出更稳健、更专业的代码。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发
    上一篇: C#栈和队列详解
    相关文章 更多
    异常处理和文件流应用在Java中的使用
    异常处理和文件流应用在Java中的使用

    Java是一种面向对象的编程语言,出现了异常处理机制和文件流操作功能,进一步提高了Java程序的可靠性和实用性。本文将简要介绍Java中的异常处理和文件流应用。一、异常处理异常指的是程序在执行过程中出现了不正常的情况,例如代码语法错误、数组越界、文件不存在等,这些都是常见的异常情况。Java中提供了异常处理机制来解决这些问题。在Java中,异常分为两类:受检

    使用BufferedReader和BufferedWriter实现Java文件的高效读写
    使用BufferedReader和BufferedWriter实现Java文件的高效读写

    使用BufferedReader和BufferedWriter类进行高效的Java文件读写Java中提供了许多用于文件读写的类,其中BufferedReader和BufferedWriter是比较常用的两个类。使用这两个类可以提高文件读写的效率。BufferedReader类继承自Reader类,提供了带缓冲区的字符输入流,可以一次读取多个字符,减少了对底层

    GitHub六个AI开源项目能做什么?软件理解、语音与求职场景
    GitHub六个AI开源项目能做什么?软件理解、语音与求职场景

    解析六个GitHub AI开源项目的具体用途,包括软件静态分析、智能体回答检查、多语言配音、求职材料生成、本地代码检索及动态歌词展示,帮助开发者根据实际需求筛选工具并正确验证结果。

    opencode安装skills教程及本地配置方法
    opencode安装skills教程及本地配置方法

    遇到OpenCode Skills无法加载或配置无效?本文手把手教你完成Skills的安装、环境变量设置及本地调试,避开常见坑点,让AI助手更懂你的代码习惯。

    如何开启Visual Studio2022实时代码分析警告提示
    如何开启Visual Studio2022实时代码分析警告提示

    解决 Visual Studio 2022 编辑时不显示代码分析警告的问题。指南涵盖 .NET 项目实时分析设置、Roslyn 分析器范围调整及错误列表来源筛选,确保开发者能高效利用实时代码诊断功能。

    如何在Visual Studio2022查看变量监视窗口调试程序
    如何在Visual Studio2022查看变量监视窗口调试程序

    详解 Visual Studio 2022 调试技巧:包括断点设置、监视窗口开启方法、变量添加步骤以及通过 F10 单步执行观察变量值变化的全过程。

    Visual Studio2017设置默认编码为UTF-8不带BOM
    Visual Studio2017设置默认编码为UTF-8不带BOM

    针对 Visual Studio 2017 缺乏全局默认编码选项的情况,详解如何利用 .editorconfig 设定项目级 UTF-8 无 BOM 规则,以及手动转换现有文件并校验字节的方法。

    Visual Studio2022F5调试提示启动项目未配置怎么修复
    Visual Studio2022F5调试提示启动项目未配置怎么修复

    解决 Visual Studio 2022 F5 调试报错问题,通过设置启动项目、检查解决方案属性及正确区分类库与应用项目,快速恢复调试功能。

    Visual Studio2022NuGet包还原失败离线处理方案
    Visual Studio2022NuGet包还原失败离线处理方案

    解决Visual Studio 2022离线环境中NuGet包还原失败的难题,涵盖依赖链分析、本地源配置、包集收集及隔离验证步骤,帮助开发者构建稳定的离线开发环境。

    Visual Studio2017大项目加载缓慢,优化加载性能技巧
    Visual Studio2017大项目加载缓慢,优化加载性能技巧

    解决Visual Studio 2017大型项目加载慢的实用指南。涵盖性能监测、扩展管理、文档恢复优化及版本兼容性检查,帮助开发者精准定位瓶颈并提升工作效率。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。