Class FileCheck

  • All Implemented Interfaces:
    AutoCloseable

    public class FileCheck
    extends Object
    implements AutoCloseable
    文件检查器

    提供文件的读写检查、文件锁控制、元信息获取等功能

    提实现了 AutoCloseable 接口,支持 try-with-resources 自动释放资源

    提所有公共方法均会进行状态校验,确保在文件未关闭时操作

    提加锁方法通过 LockExecutors 实现线程安全(同一实例内互斥),文件锁本身为进程级别,跨进程仍有效

    Since:
    2.0.4
    Author:
    Pan
    • Constructor Detail

      • FileCheck

        public FileCheck​(File file,
                         String mode)
        构造文件检查器
        Parameters:
        file - 文件对象,不能为 null
        mode - 打开模式,常用 "r"(只读)或 "rw"(读写),不能为空
        Throws:
        NotFoundException - 如果文件不存在且模式需要读取时抛出
        IORuntimeException - 如果打开文件失败
        IllegalArgumentException - 如果参数非法
    • Method Detail

      • isReadable

        public boolean isReadable()
        判断文件是否可读

        基于文件系统权限和打开模式判断

        Returns:
        boolean true表示可读
        Throws:
        IORuntimeException - 如果文件已关闭
      • isWritable

        public boolean isWritable()
        判断文件是否可写

        基于文件系统权限和打开模式判断

        Returns:
        boolean true表示可写
        Throws:
        IORuntimeException - 如果文件已关闭
      • isExecutable

        public boolean isExecutable()
        判断文件是否可执行(对于普通文件)
        Returns:
        boolean true表示可执行
        Throws:
        IORuntimeException - 如果文件已关闭
      • size

        public long size()
        获取文件大小(字节数)
        Returns:
        long 文件大小
        Throws:
        IORuntimeException - 如果读取失败或文件已关闭
      • lastModified

        public long lastModified()
        获取文件最后修改时间(毫秒数)
        Returns:
        long 最后修改时间戳
        Throws:
        IORuntimeException - 如果文件已关闭
      • lock

        public void lock()
        尝试获取文件独占锁,阻塞直到获得锁或发生错误

        如果当前实例已经持有锁,则直接返回(不重复加锁)该方法通过 LockExecutors 保证线程安全

        Throws:
        IORuntimeException - 如果获取锁失败或文件已关闭
      • tryLock

        public boolean tryLock()
        尝试获取文件独占锁,非阻塞,立即返回
        Returns:
        boolean true表示成功获取锁,false 表示锁已被其他进程持有
        Throws:
        IORuntimeException - 如果尝试锁失败或文件已关闭
      • unlock

        public void unlock()
        释放文件锁

        如果当前未持有锁,则直接返回

        Throws:
        IORuntimeException - 如果释放锁失败
      • isLocked

        public boolean isLocked()
        判断当前实例是否持有文件锁
        Returns:
        boolean true表示持有锁
      • close

        public void close()
        关闭文件并释放所有相关资源

        如果持有锁,会自动释放 该方法可被多次调用,但只有第一次有效

        Specified by:
        close in interface AutoCloseable
        Throws:
        IORuntimeException - 如果关闭文件失败
      • getPath

        public String getPath()
        获取文件路径
        Returns:
        String 绝对路径
      • getName

        public String getName()
        获取文件名
        Returns:
        String 文件名
      • exists

        public boolean exists()
        判断文件是否存在(检查的是底层文件,可能已被外部修改)
        Returns:
        boolean true表示存在