FileStatus(hadoop对于一个文件/文件夹的表示)类

 
  
package org.apache.hadoop.fs;

import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;

import org.apache.hadoop.classification.InterfaceAudience;
import org.apache.hadoop.classification.InterfaceStability;
import org.apache.hadoop.fs.permission.FsPermission;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.Writable;

/** Interface that represents the client side information for a file.
* 对于一个hdfs中文件的表示类
*/
@InterfaceAudience.Public
@InterfaceStability.Stable
public class FileStatus implements Writable, Comparable {

private 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;

public FileStatus() { this ( 0 , false , 0 , 0 , 0 , 0 , null , null , null , null ); }

// We should deprecate this soon?
public FileStatus( long length, boolean isdir, int block_replication,
long blocksize, long modification_time, Path path) {

this (length, isdir, block_replication, blocksize, modification_time,
0 , null , null , null , path);
}

/**
* Constructor for file systems on which symbolic links are not supported
*/
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) {
this (length, isdir, block_replication, blocksize, modification_time,
access_time, permission, owner, group,
null , 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;
this .permission = (permission == null ) ?
FsPermission.getDefault() : permission;
this .owner = (owner == null ) ? "" : owner;
this .group = (group == null ) ? "" : group;
this .symlink = symlink;
this .path = path;
}

/**
* Get the length of this file, in bytes.
*
@return the length of this file, in bytes.
*/
public long getLen() {
return length;
}

/**
* Is this a file?
*
@return true if this is a file
*/
public boolean isFile() {
return ! isdir && ! isSymlink();
}

/**
* Is this a directory?
*
@return true if this is a directory
*/
public boolean isDirectory() {
return isdir;
}

/**
* Old interface, instead use the explicit {
@link FileStatus#isFile()},
* {
@link FileStatus#isDirectory()}, and { @link FileStatus#isSymlink()}
*
@return true if this is a directory.
*
@deprecated Use { @link FileStatus#isFile()},
* {
@link FileStatus#isDirectory()}, and { @link FileStatus#isSymlink()}
* instead.
*/
@Deprecated
public boolean isDir() {
return isdir;
}

/**
* Is this a symbolic link?
*
@return true if this is a symbolic link
*/
public boolean isSymlink() {
return symlink != null ;
}

/**
* Get the block size of the file.
*
@return the number of bytes
*/
public long getBlockSize() {
return blocksize;
}

/**
* Get the replication factor of a file.
*
@return the replication factor of a file.
*/
public short getReplication() {
return block_replication;
}

/**
* Get the modification time of the file.
*
@return the modification time of file in milliseconds since January 1, 1970 UTC.
*/
public long getModificationTime() {
return modification_time;
}

/**
* Get the access time of the file.
*
@return the access time of file in milliseconds since January 1, 1970 UTC.
*/
public long getAccessTime() {
return access_time;
}

/**
* Get FsPermission associated with the file.
*
@return permssion. If a filesystem does not have a notion of permissions
* or if permissions could not be determined, then default
* permissions equivalent of "rwxrwxrwx" is returned.
*/
public FsPermission getPermission() {
return permission;
}

/**
* Get the owner of the file.
*
@return owner of the file. The string could be empty if there is no
* notion of owner of a file in a filesystem or if it could not
* be determined (rare).
*/
public String getOwner() {
return owner;
}

/**
* Get the group associated with the file.
*
@return group for the file. The string could be empty if there is no
* notion of group of a file in a filesystem or if it could not
* be determined (rare).
*/
public String getGroup() {
return group;
}

public Path getPath() {
return path;
}

public void setPath( final Path p) {
path
= p;
}

/* These are provided so that these values could be loaded lazily
* by a filesystem (e.g. local file system).
*/

/**
* Sets permission.
*
@param permission if permission is null, default value is set
*/
protected void setPermission(FsPermission permission) {
this .permission = (permission == null ) ?
FsPermission.getDefault() : permission;
}

/**
* Sets owner.
*
@param owner if it is null, default value is set
*/
protected void setOwner(String owner) {
this .owner = (owner == null ) ? "" : owner;
}

/**
* Sets group.
*
@param group if it is null, default value is set
*/
protected void setGroup(String group) {
this .group = (group == null ) ? "" : group;
}

/**
*
@return The contents of the symbolic link.
*/
public Path getSymlink() throws IOException {
if ( ! isSymlink()) {
throw new IOException( " Path " + path + " is not a symbolic link " );
}
return symlink;
}

public void setSymlink( final Path p) {
symlink
= p;
}

//
// Writable
//
public void write(DataOutput out) throws IOException {
Text.writeString(out, getPath().toString());
out.writeLong(length);
out.writeBoolean(isdir);
out.writeShort(block_replication);
out.writeLong(blocksize);
out.writeLong(modification_time);
out.writeLong(access_time);
permission.write(out);
Text.writeString(out, owner);
Text.writeString(out, group);
out.writeBoolean(isSymlink());
if (isSymlink()) {
Text.writeString(out, symlink.toString());
}
}

public void readFields(DataInput in) throws IOException {
String strPath
= Text.readString(in);
this .path = new Path(strPath);
this .length = in.readLong();
this .isdir = in.readBoolean();
this .block_replication = in.readShort();
blocksize
= in.readLong();
modification_time
= in.readLong();
access_time
= in.readLong();
permission.readFields(in);
owner
= Text.readString(in);
group
= Text.readString(in);
if (in.readBoolean()) {
this .symlink = new Path(Text.readString(in));
}
else {
this .symlink = null ;
}
}

/**
* Compare this object to another object
*
*
@param o the object to be compared.
*
@return a negative integer, zero, or a positive integer as this object
* is less than, equal to, or greater than the specified object.
*
*
@throws ClassCastException if the specified object's is not of
* type FileStatus
*/
public int compareTo(Object o) {
FileStatus other
= (FileStatus)o;
return this .getPath().compareTo(other.getPath());
}

/** Compare if this object is equal to another object
*
@param o the object to be compared.
*
@return true if two file status has the same path name; false if not.
*/
public boolean equals(Object o) {
if (o == null ) {
return false ;
}
if ( this == o) {
return true ;
}
if ( ! (o instanceof FileStatus)) {
return false ;
}
FileStatus other
= (FileStatus)o;
return this .getPath().equals(other.getPath());
}

/**
* Returns a hash code value for the object, which is defined as
* the hash code of the path name.
*
*
@return a hash code value for the path name.
*/
public int hashCode() {
return getPath().hashCode();
}
}

转载于:https://www.cnblogs.com/serendipity/articles/2083415.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值