FileStatus.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:7k
源码类别:

网格计算

开发平台:

Java

  1. /**
  2.  * Licensed to the Apache Software Foundation (ASF) under one
  3.  * or more contributor license agreements.  See the NOTICE file
  4.  * distributed with this work for additional information
  5.  * regarding copyright ownership.  The ASF licenses this file
  6.  * to you under the Apache License, Version 2.0 (the
  7.  * "License"); you may not use this file except in compliance
  8.  * with the License.  You may obtain a copy of the License at
  9.  *
  10.  *     http://www.apache.org/licenses/LICENSE-2.0
  11.  *
  12.  * Unless required by applicable law or agreed to in writing, software
  13.  * distributed under the License is distributed on an "AS IS" BASIS,
  14.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.  * See the License for the specific language governing permissions and
  16.  * limitations under the License.
  17.  */
  18. package org.apache.hadoop.fs;
  19. import java.io.DataInput;
  20. import java.io.DataOutput;
  21. import java.io.IOException;
  22. import org.apache.hadoop.fs.permission.FsPermission;
  23. import org.apache.hadoop.io.Text;
  24. import org.apache.hadoop.io.Writable;
  25. /** Interface that represents the client side information for a file.
  26.  */
  27. public class FileStatus implements Writable, Comparable {
  28.   private Path path;
  29.   private long length;
  30.   private boolean isdir;
  31.   private short block_replication;
  32.   private long blocksize;
  33.   private long modification_time;
  34.   private long access_time;
  35.   private FsPermission permission;
  36.   private String owner;
  37.   private String group;
  38.   
  39.   public FileStatus() { this(0, false, 0, 0, 0, 0, null, null, null, null); }
  40.   
  41.   //We should deprecate this soon?
  42.   public FileStatus(long length, boolean isdir, int block_replication,
  43.                     long blocksize, long modification_time, Path path) {
  44.     this(length, isdir, block_replication, blocksize, modification_time,
  45.          0, null, null, null, path);
  46.   }
  47.   
  48.   public FileStatus(long length, boolean isdir, int block_replication,
  49.                     long blocksize, long modification_time, long access_time,
  50.                     FsPermission permission, String owner, String group, 
  51.                     Path path) {
  52.     this.length = length;
  53.     this.isdir = isdir;
  54.     this.block_replication = (short)block_replication;
  55.     this.blocksize = blocksize;
  56.     this.modification_time = modification_time;
  57.     this.access_time = access_time;
  58.     this.permission = (permission == null) ? 
  59.                       FsPermission.getDefault() : permission;
  60.     this.owner = (owner == null) ? "" : owner;
  61.     this.group = (group == null) ? "" : group;
  62.     this.path = path;
  63.   }
  64.   /* 
  65.    * @return the length of this file, in blocks
  66.    */
  67.   public long getLen() {
  68.     return length;
  69.   }
  70.   /**
  71.    * Is this a directory?
  72.    * @return true if this is a directory
  73.    */
  74.   public boolean isDir() {
  75.     return isdir;
  76.   }
  77.   /**
  78.    * Get the block size of the file.
  79.    * @return the number of bytes
  80.    */
  81.   public long getBlockSize() {
  82.     return blocksize;
  83.   }
  84.   /**
  85.    * Get the replication factor of a file.
  86.    * @return the replication factor of a file.
  87.    */
  88.   public short getReplication() {
  89.     return block_replication;
  90.   }
  91.   /**
  92.    * Get the modification time of the file.
  93.    * @return the modification time of file in milliseconds since January 1, 1970 UTC.
  94.    */
  95.   public long getModificationTime() {
  96.     return modification_time;
  97.   }
  98.   /**
  99.    * Get the access time of the file.
  100.    * @return the access time of file in milliseconds since January 1, 1970 UTC.
  101.    */
  102.   public long getAccessTime() {
  103.     return access_time;
  104.   }
  105.   /**
  106.    * Get FsPermission associated with the file.
  107.    * @return permssion. If a filesystem does not have a notion of permissions
  108.    *         or if permissions could not be determined, then default 
  109.    *         permissions equivalent of "rwxrwxrwx" is returned.
  110.    */
  111.   public FsPermission getPermission() {
  112.     return permission;
  113.   }
  114.   
  115.   /**
  116.    * Get the owner of the file.
  117.    * @return owner of the file. The string could be empty if there is no
  118.    *         notion of owner of a file in a filesystem or if it could not 
  119.    *         be determined (rare).
  120.    */
  121.   public String getOwner() {
  122.     return owner;
  123.   }
  124.   
  125.   /**
  126.    * Get the group associated with the file.
  127.    * @return group for the file. The string could be empty if there is no
  128.    *         notion of group of a file in a filesystem or if it could not 
  129.    *         be determined (rare).
  130.    */
  131.   public String getGroup() {
  132.     return group;
  133.   }
  134.   
  135.   public Path getPath() {
  136.     return path;
  137.   }
  138.   /* These are provided so that these values could be loaded lazily 
  139.    * by a filesystem (e.g. local file system).
  140.    */
  141.   
  142.   /**
  143.    * Sets permission.
  144.    * @param permission if permission is null, default value is set
  145.    */
  146.   protected void setPermission(FsPermission permission) {
  147.     this.permission = (permission == null) ? 
  148.                       FsPermission.getDefault() : permission;
  149.   }
  150.   
  151.   /**
  152.    * Sets owner.
  153.    * @param owner if it is null, default value is set
  154.    */  
  155.   protected void setOwner(String owner) {
  156.     this.owner = (owner == null) ? "" : owner;
  157.   }
  158.   
  159.   /**
  160.    * Sets group.
  161.    * @param group if it is null, default value is set
  162.    */  
  163.   protected void setGroup(String group) {
  164.     this.group = (group == null) ? "" :  group;
  165.   }
  166.   //////////////////////////////////////////////////
  167.   // Writable
  168.   //////////////////////////////////////////////////
  169.   public void write(DataOutput out) throws IOException {
  170.     Text.writeString(out, getPath().toString());
  171.     out.writeLong(length);
  172.     out.writeBoolean(isdir);
  173.     out.writeShort(block_replication);
  174.     out.writeLong(blocksize);
  175.     out.writeLong(modification_time);
  176.     out.writeLong(access_time);
  177.     permission.write(out);
  178.     Text.writeString(out, owner);
  179.     Text.writeString(out, group);
  180.   }
  181.   public void readFields(DataInput in) throws IOException {
  182.     String strPath = Text.readString(in);
  183.     this.path = new Path(strPath);
  184.     this.length = in.readLong();
  185.     this.isdir = in.readBoolean();
  186.     this.block_replication = in.readShort();
  187.     blocksize = in.readLong();
  188.     modification_time = in.readLong();
  189.     access_time = in.readLong();
  190.     permission.readFields(in);
  191.     owner = Text.readString(in);
  192.     group = Text.readString(in);
  193.   }
  194.   /**
  195.    * Compare this object to another object
  196.    * 
  197.    * @param   o the object to be compared.
  198.    * @return  a negative integer, zero, or a positive integer as this object
  199.    *   is less than, equal to, or greater than the specified object.
  200.    * 
  201.    * @throws ClassCastException if the specified object's is not of 
  202.    *         type FileStatus
  203.    */
  204.   public int compareTo(Object o) {
  205.     FileStatus other = (FileStatus)o;
  206.     return this.getPath().compareTo(other.getPath());
  207.   }
  208.   
  209.   /** Compare if this object is equal to another object
  210.    * @param   o the object to be compared.
  211.    * @return  true if two file status has the same path name; false if not.
  212.    */
  213.   public boolean equals(Object o) {
  214.     if (o == null) {
  215.       return false;
  216.     }
  217.     if (this == o) {
  218.       return true;
  219.     }
  220.     if (!(o instanceof FileStatus)) {
  221.       return false;
  222.     }
  223.     FileStatus other = (FileStatus)o;
  224.     return this.getPath().equals(other.getPath());
  225.   }
  226.   
  227.   /**
  228.    * Returns a hash code value for the object, which is defined as
  229.    * the hash code of the path name.
  230.    *
  231.    * @return  a hash code value for the path name.
  232.    */
  233.   public int hashCode() {
  234.     return getPath().hashCode();
  235.   }
  236. }