File类踩坑记录

背景

有一天运维突然告诉我,生产服务器下面的目录文件满了,我表示一脸蒙,去服务器一看,才发现确实是非常多的文件,那这个是怎么产生的呢?我们一起来研究一下。

在Java中,File 类的 deletedeleteOnExit 方法有不同的用途和行为:

file.delete()

  • 作用:立即删除文件或目录。
  • 返回值:如果删除成功,返回 true,否则返回 false。这可能由于文件不存在、没有权限或文件被其他进程占用等原因。
  • 使用场景:当你需要实时删除文件或目录,可以立即使用这个方法。

file.deleteOnExit()

  • 作用:在程序终止时自动删除文件。也就是说,文件会在 JVM 退出时被删除,而不是立即。
  • 返回值:无返回值。该方法只是将文件的删除请求标记为在应用关闭时执行。
  • 使用场景:通常用于需要临时文件的情况,比如创建一些不再需要的临时文件并希望在程序结束时自动清理。
    而我代码中也正是调用的file.deleteOnExit()方法,所以导致在springboot项目中,并没有给我及时的删除,进而导致服务在运行一段时间后,保留了大量的临时文件。

顺带复习一下如何在linux服务器上删除制定类型的文件:
在Linux中,可以使用命令行工具来删除指定类型的文件。最常用的工具是 findrm 命令。以下是一些示例:

使用 find 命令删除指定类型的文件

  1. 删除特定扩展名的文件(例如 .txt):

    find /path/to/directory -type f -name "*.txt" -delete
    
  2. 删除多个扩展名的文件(例如 .log.tmp):

    find /path/to/directory -type f \( -name "*.log" -o -name "*.tmp" \) -delete
    
  3. 按照文件大小或修改时间删除文件

    • 删除大于100MB的文件:

      find /path/to/directory -type f -size +100M -delete
      
    • 删除修改时间超过30天的文件:

      find /path/to/directory -type f -mtime +30 -delete
      

使用 rm 结合通配符删除

  1. 删除当前目录中的所有 .jpg 文件

    rm *.jpg
    
  2. 删除子目录及当前目录中的所有 .log 文件

    rm -r *.log
    

小心使用

  • 使用 -delete 操作时要非常小心,最好先用 -print 查看将要删除的文件:

    find /path/to/directory -type f -name "*.txt" -print
    
  • 注意彻底删除后,文件将无法恢复

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值