Java中如何获得文件的inode信息
来源:互联网 发布:linux文件目录 编辑:程序博客网 时间:2024/05/22 03:38
熟悉Linux操作系统的同学应该知道Linux文件系统采用了inode - block的结构来表示和存储文件,inode包含了文件的元数据信息,block存储实际的文件内容。Linux把一切的IO都抽象成文件,那么目录和普通文件一样,也都是文件。每个文件都有一个唯一的inode号。
可以用stat命令来查看一个文件的inode信息,比如下面这个文件 stat log.txt
可以看到Device是16777219d, inode号是1821216。这个文件内容是空的,所以Blocks为0
把这个log.txt 重命名为log2.txt,再执行stat log2.txt,可以看到只有文件名变了,其他的inode号这些元数据都没有变。
实际上普通文件的inode数据结构只存储一些元数据,不存储文件名的信息。那么文件名是存在哪里的呢,我们知道目录也是一种文件,那么它也有inode和block。普通文件的block块存储的是文件内容,目录的block块则存储了该目录下所有文件的inode号及对应的文件名等信息。
所以重命名一个文件,只是修改了它所在目录的目录block中的文件名信息,不会对文件的inode结构做任何修改。
既然inode这么有用,可以标识唯一的一个文件,那么Java如何获取这个inode信息呢。因为经常会遇到判断两个文件是否是同一个文件的场景。
Java NIO提供了一个BasicFileAttributes接口来获得文件的Inode信息。它提供了一个 fileKey()方法,返回一个Object,这个Object包含了文件的deviceid和 inode号,可以唯一的标识一个文件。
import java.nio.file.Files;import java.nio.file.Path;import java.nio.file.Paths;import java.nio.file.attribute.BasicFileAttributes;public class INodeAttributes { public static void main(String[] args) throws Exception { Path path = Paths.get("/xxxxx/log.txt2"); BasicFileAttributes bfa = Files.readAttributes(path, BasicFileAttributes.class); System.out.println("Creation Time : " + bfa.creationTime()); System.out.println("Last Access Time : " + bfa.lastAccessTime()); System.out.println("Last Modified Time : " + bfa.lastModifiedTime()); System.out.println("Is Directory : " + bfa.isDirectory()); System.out.println("Is Other : " + bfa.isOther()); System.out.println("Is Regular File : " + bfa.isRegularFile()); System.out.println("Is Symbolic Link : " + bfa.isSymbolicLink()); System.out.println("Size : " + bfa.size()); Object objectKey = bfa.fileKey(); System.out.println("Object Key : " + bfa.fileKey()); } }
看到结果输出的deviceid和inode号和用Linux stat命令返回的结果是一致的
Creation Time : 2015-01-21T03:20:41ZLast Access Time : 2015-01-21T03:38:01ZLast Modified Time : 2015-01-21T03:20:41ZIs Directory : falseIs Other : falseIs Regular File : trueIs Symbolic Link : falseSize : 0Object Key : (dev=1000003,ino=1821216)
- Java中如何获得文件的inode信息
- 在Java中获得文件的描述信息
- debugfs 查找文件的 inode block 信息
- Java中获得操作系统信息的方法
- 如何根据文件的inode号查找inode数据
- (第3讲)Java如何获得用户在控制台输入的东西、如何从文件中获得数据
- jsp中如何获得一些有用的信息
- 转:C#编程中如何获得硬件的信息
- DB2_ 如何从系统编目中获得有用的信息
- java中利用反射获得对象的各种信息
- Java中通过反射获得对象的属性信息
- Java中通过反射获得对象的属性信息
- flex中如何获得客户端信息
- 如何在程序中获得wifi信息
- 文件的inode数据
- 文件的inode数据
- 查看系统的inode信息
- Linux显示inode的信息
- 程序清单 17.3
- Android中实现Launcher功能之二 ----- 添加窗口小部件以及AppWidget的创建详解
- 打印图形
- Membership 数据表结构详细解释
- GraphLab:将大数据分析从理念运用到生产
- Java中如何获得文件的inode信息
- 回顾昨天
- PreferenceFragement再次详解
- Eclipse无法下载SDKpackage
- ORA-08002: sequence SEQ_PREPAY.CURRVAL is not yet defined in this session的原因
- ajax 跨域 jsonp 处理
- 对python字符编码操作的一些认识
- Python 50行代码实现代理服务器(加强版)
- Oracle 替代Sqlserver MASTER..SPT_VALUES 获取日期区间的所有日期 表结果集 (不积跬步,无以至千里)