FileStatus类介绍

原文链接

FileStatus对象封装了文件系统中文件和目录的元数据,包括文件的长度、块大小、备份数、修改时间、所有者以及权限等信息。

FileStatus对象一般由FileSystem的getFileStatus()方法获得,调用该方法的时候要把文件的Path传递进去。

FileStatus字段解析

private Path path;                  // Path路径
private long length;                // 文件长度
private boolean isdir;              // 是都是目录
private short block_replication;    // 块的复本数
private long blocksize;             // 块大小
private long modification_time;     // 修改时间
private long access_time;           // 访问时间
private FsPermission permission;    // 权限
private String owner;               // 所有者
private String group;               // 所在组
private Path symlink;               // 符号链接,如果isdir为true那么symlink必须为null

FileStatus构造函数

public FileStatus()
public FileStatus(FileStatus other)
public FileStatus(long length, boolean isdir, int block_replication,
                    long blocksize, long modification_time, Path path)
public FileStatus(long length, boolean isdir,
                    int block_replication,
                    long blocksize, long modification_time, long access_time,
                    FsPermission permission, String owner, String group,
                    Path path)
public FileStatus(long length, boolean isdir,
                    int block_replication,
                    long blocksize, long modification_time, long access_time,
                    FsPermission permission, String owner, String group,
                    Path symlink,
                    Path path)

// 上面所有的构造函数最后都是调用的最后一个构造函数,所以下面只列出最后一个构造函数的源码

public FileStatus(long length, boolean isdir,
                    int block_replication,
                    long blocksize, long modification_time, long access_time,
                    FsPermission permission, String owner, String group,
                    Path symlink,
                    Path path) {
    this.length = length;
    this.isdir = isdir;
    this.block_replication = (short)block_replication;
    this.blocksize = blocksize;
    this.modification_time = modification_time;
    this.access_time = access_time;
    if (permission != null) {
      this.permission = permission;
    } else if (isdir) {
      this.permission = FsPermission.getDirDefault();
    } else if (symlink!=null) {
      this.permission = FsPermission.getDefault();
    } else {
      this.permission = FsPermission.getFileDefault();
    }
    this.owner = (owner == null) ? "" : owner;
    this.group = (group == null) ? "" : group;
    this.symlink = symlink;
    this.path = path;
    // 如果isdir为true则symlink必须为null
    // 如果isdir为false,则表示为是一个文件或者符号链接
    // 如果smylink为null,那么它就是一个文件
    assert (isdir && symlink == null) || !isdir;
   }

FileStatus常用函数介绍

public int compareTo(Object o)          // 比较两个对象是否指向相同的路径
public long getAccessTime()             // 得到访问时间
public long getBlockSize()              // 得到块大小
public String getGroup()                // 得到组名
public long getLen()                    // 得到文件大小
public long getModificationTime()       // 得到修改时间
public String getOwner()                // 获取所有者信息
public Path getPath()                   // 获取Path路径
public FsPermission getPermission()     // 获取权限信息
public short getReplication()           // 获取块副本数
public path getsymlink()                // 获取符号链接的Path路径
public boolean isSymlink()              // 是否为符号链接
public void readFields(DataInput in)    // 序列化读取字段
public void setPath(final Path p)       // 设置Path路径
public void setSymlink(final Path p)    // 设置符号链接
public void write(DataOutput out)       // 序列化写入字段

代码示例

package com.hdfs;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FileUtil;
import org.apache.hadoop.fs.FsUrlStreamHandlerFactory;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.util.Progressable;

public class HdfsTest1 {
    //显示文件所有信息
    public static void fileInfo(String path) throws IOException{
        Configuration conf = new Configuration();
        FileSystem fs = FileSystem.get(conf);
        Path p = new Path(path);
        //FileStatus对象封装了文件的和目录的额元数据,包括文件长度、块大小、权限等信息
        FileStatus fileStatus = fs.getFileStatus(p);
        System.out.println("文件路径:"+fileStatus.getPath());
        System.out.println("块的大小:"+fileStatus.getBlockSize());
        System.out.println("文件所有者:"+fileStatus.getOwner()+":"+fileStatus.getGroup());
        System.out.println("文件权限:"+fileStatus.getPermission());
        System.out.println("文件长度:"+fileStatus.getLen());
        System.out.println("备份数:"+fileStatus.getReplication());
        System.out.println("修改时间:"+fileStatus.getModificationTime());
    }
    public static void main(String[] args) throws IOException {
        fileInfo("/user/hadoop/aa.mp4");
    }

}

输出结果如下:

文件路径:hdfs://master:9000/user/hadoop/aa.mp4
块的大小:67108864
文件所有者:hadoop:supergroup
文件权限:rw-r--r--
文件长度:76805248
备份数:3
修改时间:1371484526483

参考博文

http://www.cnblogs.com/liuling/p/2013-6-18-01.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,219评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,363评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,933评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,020评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,400评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,640评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,896评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,597评论 0 199
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,327评论 1 244
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,581评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,072评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,399评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,054评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,083评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,849评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,672评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,585评论 2 270

推荐阅读更多精彩内容