如何用java获取一个文件的创建时间

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用java获取一个文件的创建时间相关的知识,希望对你有一定的参考价值。

参考技术A  java没有函数能直接拿到文件的创建时间lastModified()只能获得最后一次修改时间
 想要拿到创建时间必须依赖Windows系统的API,通过调CMD命令实现,
 代码如下:
 public static void main(String[] args)   
        try   
            Process p = Runtime.getRuntime().exec(  
                    "cmd /C dir d:\\\\test.txt /tc");  
            InputStream is = p.getInputStream();  
            BufferedReader br = new BufferedReader(new InputStreamReader(is));  
            String str;  
            int i = 0;  
            while ((str = br.readLine()) != null)   
                i++;  
                if (i == 6)   
                    System.out.println(str.substring(0, 17));  
                  
              
  
         catch (java.io.IOException exc)   
            exc.printStackTrace();  
          
    

参考技术B File file = new File("文件路径");
long time = file.lastModified();//返回文件最后修改时间,是以个long型毫秒数
String ctime = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date(time));
System.out.println(ctime);本回答被提问者和网友采纳

Linux 如何用命令查看binlog文件的创建时间


背景

MySQL在26日 16:23:49产生了大量的慢查询,在这段时间内,binlog文件刷新的很快(查看慢日志是mysql DML并发比较多),想知道写完一个binlog文件究竟花了几分钟时间?

技术图片

分析

  • 三个binlog文件的最后修改间隔时间分别是2 分钟和1 分钟
  • 同一个事务只能写同一个binlog文件
  • mysql-bin.016126文件的最后修改时间16:22不一定是mysql-bin.016127 文件创建的时间(存在大事务的情况下,大事务还在写上一个binlog文件,新的事务已经在写新创建的binlog文件了)
  • 使用mysqlbinlog 可以读取binlog文件中的event,知道文件的创建时间
  • 在Linux下,是否有命令可以查出文件的创建时间了?

方法

1、使用stat命令
stat mysql-bin.016126

File: ‘mysql-bin.016126’
Size: 262146609 Blocks: 512016 IO Block: 4096 regular file
Device: fd02h/64770d Inode: 135529302 Links: 1
Access: (0640/-rw-r-----) Uid: ( 5701/actiontech-mysql) Gid: ( 5701/actiontech-mysql)
Access: 2019-04-28 14:41:42.967043003 +0800
Modify: 2019-04-26 16:24:21.823932020 +0800
Change: 2019-04-26 16:24:21.823932020 +0800
?

1、访问时间,读一次这个文件的内容,这个时间就会更新。比如对这个文件运用 more、cat等命令。ls、stat命令都不会修改文件的访问时间
2、修改时间,修改时间是文件内容最后一次被修改时间。比如:vi后保存文件。ls -l列出的时间就是这个时间
3、状态改动时间。是该文件的i节点最后一次被修改的时间,通过chmod、chown命令修改一次文件属性,这个时间就会更新

如果文件创建后就没有修改过,修改时间=创建时间;如果文件创建后,状态就没有改变过,那么状态改变时间=创建时间;如果文件创建后,没有被读取过,那么访问时间=创建时间。对使用过的文件,这些基本不太可能


2、使用debugfs
获取binlog文件存放根文件目录

grep ‘datas‘ /etc/fstab
/dev/mapper/centos-datas /datas ext4 defaults 1 2

得到binlog文件inode号

ls -i mysql-bin.016127
135529232 mysql-bin.016127

得到文件创建时间

debugfs -R ‘stat <135529232>‘ /dev/mapper/centos-datas
debugfs 1.42.9 (28-Dec-2013)
Inode: 135529232 Type: regular Mode: 0640 Flags: 0x80000
Generation: 2396969921 Version: 0x00000000:00000001
User: 5701 Group: 5701 Size: 262147164
File ACL: 0 Directory ACL: 0
Links: 1 Blockcount: 512016
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x5cc2c082:47dcd9bc -- Fri Apr 26 16:25:38 2019
atime: 0x5cc55c49:2929fd18 -- Sun Apr 28 15:54:49 2019
mtime: 0x5cc2c082:47dcd9bc -- Fri Apr 26 16:25:38 2019
crtime: 0x5cc2c035:c470d1d0 -- Fri Apr 26 16:24:21 2019
Size of extra inode fields: 28
EXTENTS:

  • crtime即为文件创建时间
  • crtime和mtime文件最后修改时间差1分17秒
  • MySQL写完一个binlog文件用时1分多钟

注意

xfs文件系统不支持用debugfs来查看文件的创建时间
grep root /etc/fstab
/dev/mapper/centos-root / xfs defaults 1 1

ls -i /test1
357556 /test1

debugfs -R ‘stat <357556>‘ /dev/mapper/centos-root
debugfs 1.42.9 (28-Dec-2013)
/dev/mapper/centos-root: Bad magic number in super-block while opening filesystem
stat: Filesystem not open

参考
Linux文件创建时间

以上是关于如何用java获取一个文件的创建时间的主要内容,如果未能解决你的问题,请参考以下文章

如何用golang获取linux上文件的创建/修改时间

如何用java把数据写入到excel

如何用java获取ftp服务器上文件的md5校验码?

如何用C#获取此XML文件的VALUE值?

如何用pycharm编写获取时间的代码

如何用递归获取一个文件夹内的所有文件存放在一个文件数组中