IO代码解释3

演示了File类中文件删除 的两种方式:delete()(立即删除)和deleteOnExit()(进程退出后删除),并通过控制台阻塞的方式直观展示deleteOnExit()的 "延迟删除" 特性。

代码整体功能总结

该程序创建指向./1.txt的File对象,注释了delete()(立即删除)的用法,重点调用deleteOnExit()(标记文件在进程退出后删除);随后通过Scanner读取控制台输入阻塞程序,让你能直观看到:在输入内容前(进程未退出)文件仍存在,输入内容后(进程退出)文件才被删除。

逐行详细解释

java 复制代码
package io; // 声明代码所属包名
java 复制代码
import java.io.File; // 导入File类,用于文件路径封装和删除操作
import java.util.Scanner; // 导入Scanner类,用于读取控制台输入(阻塞程序)
java 复制代码
public class Demo3 { // 定义公共类Demo3,程序入口在此类中
    public static void main(String[] args) {
        // 创建File对象,指向当前工作目录下的1.txt文件
        File file = new File("./1.txt");

        // 【注释部分】演示delete()方法(立即删除)
        // boolean result = file.delete(); // 立即删除文件,返回删除结果:
        //                                  - 成功(文件存在并删除)→ true
        //                                  - 失败(文件不存在/权限不足)→ false
        // System.out.println("result = " + result); // 打印删除结果

        // 【核心】演示deleteOnExit()方法(延迟删除)
        // 作用:标记文件,当当前Java进程正常退出时,自动删除该文件
        // 特点:调用后文件不会立即删除,仅做"删除标记"
        file.deleteOnExit();

        // 创建Scanner对象,读取控制台输入(用于阻塞程序,展示延迟删除特性)
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入任意内容继续"); // 提示用户输入
        scanner.next(); // 阻塞程序:等待用户输入任意内容后,程序才会继续执行并退出
    }
}

关键方法对比(核心知识点)

方法 执行时机 返回值 核心特点
delete() 调用时立即执行 boolean(成功 / 失败) 1. 立即删除文件 / 空目录;2. 非空目录无法直接删除;3. 可通过返回值判断删除是否成功
deleteOnExit() Java 进程退出时执行 void(无返回值) 1. 仅做 "删除标记",调用后文件仍存在;2. 进程正常退出(如 main 方法执行完)时自动删除;3. 进程异常终止(如强制关闭)可能不执行;4. 无法判断删除是否成功(无返回值)

运行流程与效果演示

前提:当前目录下存在1.txt文件
  1. 运行程序,控制台输出输入任意内容继续,程序阻塞;
  2. 此时去查看当前目录,1.txt仍然存在 (因为deleteOnExit()仅标记,未执行删除);
  3. 在控制台输入任意内容(如abc)并回车,scanner.next()读取输入,main 方法执行完毕,Java 进程退出;
  4. 再次查看当前目录,1.txt已被删除 (进程退出触发deleteOnExit()的删除操作)。
若1.txt不存在
  • 调用deleteOnExit()不会报错,进程退出时也无任何操作(因为要删除的文件本身不存在)。

注意事项

  1. deleteOnExit()标记的删除操作无法取消:一旦调用,除非进程异常终止,否则退出时必然执行删除;
  2. 权限问题:若程序对文件无删除权限,无论是delete()还是deleteOnExit()都会失败(delete()返回 false,deleteOnExit()无提示但删除失败);
  3. deleteOnExit()对 "临时文件" 非常有用:比如程序运行中创建的临时缓存文件,可通过该方法确保进程退出后自动清理,避免残留。

总结

  1. delete()是立即删除 ,有返回值可判断结果;deleteOnExit()是延迟删除(进程退出后),无返回值;
  2. 代码中通过Scanner阻塞程序,是为了直观展示deleteOnExit()"调用后文件不立即删除" 的特性;
  3. deleteOnExit()适合清理程序运行时的临时文件,确保进程退出后无文件残留。

整体代码

java 复制代码
package io;

import java.io.File;
import java.util.Scanner;

public class Demo3 {
    public static void main(String[] args) {
        File file = new File("./1.txt");

        // 对文件进行删除. 删除成功, 返回 true; 删除失败 (文件本来就不存在), 返回 false
        // boolean result = file.delete();
        // System.out.println("result = " + result);

        // 不是立即删除, 而是等当前进程结束, 再触发删除.
        file.deleteOnExit();

        Scanner scanner = new Scanner(System.in);
        System.out.println("输入任意内容继续");
        scanner.next();
    }
}
相关推荐
T06205147 分钟前
【数据集】各地级市污水处理厂详细指标数据(1985-2024年)
大数据
跨境联盟8 分钟前
实体大健康门店转型:精准营养服务如何跳出单纯卖产品的困局
大数据·人工智能·健康医疗·健康管理·精准营养
appsvip19 分钟前
给社区系统加一套 AI 助手:从架构到落地的思考
大数据·人工智能·架构
开开心心就好33 分钟前
课堂随机点名工具,绿色版免安装双击即用
java·服务器·前端·ffmpeg·音视频·perl·symfony
code2cat39 分钟前
Java高级篇之Socket:从建立连接到完整收发一条消息
java·开发语言
文慧的科技江湖43 分钟前
2026年10月21日充电桩行业招投标早报:平台第一次进了标的名字,还是没进报价表
大数据·人工智能·开源·新能源·充电桩·新能源汽车·招投标
凯瑟琳.奥古斯特1 小时前
OCR文字检测算法对比解析
开发语言·python·职场和发展
PD我是你的真爱粉1 小时前
成熟Agent系统设计深度研究报告
java·大数据·人工智能
Misnice1 小时前
Python 内置函数大全
开发语言·windows·python
美狐美颜SDK开放平台1 小时前
直播APP集成美颜SDK,如何梳理第三方组件的数据权限?
开发语言·人工智能·深度学习·音视频·第三方美颜sdk