FileStatus類介紹

原文鏈接

FileStatus對(duì)象封裝了文件系統(tǒng)中文件和目錄的元數(shù)據(jù),包括文件的長(zhǎng)度、塊大小、備份數(shù)、修改時(shí)間、所有者以及權(quán)限等信息。

FileStatus對(duì)象一般由FileSystem的getFileStatus()方法獲得,調(diào)用該方法的時(shí)候要把文件的Path傳遞進(jìn)去。

FileStatus字段解析

private Path path;                  // Path路徑
private long length;                // 文件長(zhǎng)度
private boolean isdir;              // 是都是目錄
private short block_replication;    // 塊的復(fù)本數(shù)
private long blocksize;             // 塊大小
private long modification_time;     // 修改時(shí)間
private long access_time;           // 訪問(wèn)時(shí)間
private FsPermission permission;    // 權(quán)限
private String owner;               // 所有者
private String group;               // 所在組
private Path symlink;               // 符號(hào)鏈接,如果isdir為true那么symlink必須為null

FileStatus構(gòu)造函數(shù)

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)

// 上面所有的構(gòu)造函數(shù)最后都是調(diào)用的最后一個(gè)構(gòu)造函數(shù),所以下面只列出最后一個(gè)構(gòu)造函數(shù)的源碼

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,則表示為是一個(gè)文件或者符號(hào)鏈接
    // 如果smylink為null,那么它就是一個(gè)文件
    assert (isdir && symlink == null) || !isdir;
   }

FileStatus常用函數(shù)介紹

public int compareTo(Object o)          // 比較兩個(gè)對(duì)象是否指向相同的路徑
public long getAccessTime()             // 得到訪問(wèn)時(shí)間
public long getBlockSize()              // 得到塊大小
public String getGroup()                // 得到組名
public long getLen()                    // 得到文件大小
public long getModificationTime()       // 得到修改時(shí)間
public String getOwner()                // 獲取所有者信息
public Path getPath()                   // 獲取Path路徑
public FsPermission getPermission()     // 獲取權(quán)限信息
public short getReplication()           // 獲取塊副本數(shù)
public path getsymlink()                // 獲取符號(hào)鏈接的Path路徑
public boolean isSymlink()              // 是否為符號(hào)鏈接
public void readFields(DataInput in)    // 序列化讀取字段
public void setPath(final Path p)       // 設(shè)置Path路徑
public void setSymlink(final Path p)    // 設(shè)置符號(hào)鏈接
public void write(DataOutput out)       // 序列化寫(xiě)入字段

代碼示例

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對(duì)象封裝了文件的和目錄的額元數(shù)據(jù),包括文件長(zhǎng)度、塊大小、權(quán)限等信息
        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("文件權(quán)限:"+fileStatus.getPermission());
        System.out.println("文件長(zhǎng)度:"+fileStatus.getLen());
        System.out.println("備份數(shù):"+fileStatus.getReplication());
        System.out.println("修改時(shí)間:"+fileStatus.getModificationTime());
    }
    public static void main(String[] args) throws IOException {
        fileInfo("/user/hadoop/aa.mp4");
    }

}

輸出結(jié)果如下:

文件路徑:hdfs://master:9000/user/hadoop/aa.mp4
塊的大?。?7108864
文件所有者:hadoop:supergroup
文件權(quán)限:rw-r--r--
文件長(zhǎng)度:76805248
備份數(shù):3
修改時(shí)間:1371484526483

參考博文

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容