hadoop3.x HDFS java显示给定目录下的文件、目录信息(FileSystem的listLocatedStatus、listStatus、listStatusIterator方法)

介绍

FileSystem 的 这几个方法,功能类似,都是 显示给定目录下的文件、目录信息,只是 形参、返回值 不同

RemoteIterator<LocatedFileStatus> listLocatedStatus(Path f)
RemoteIterator<LocatedFileStatus> listLocatedStatus(Path f, PathFilter filter)
FileStatus[] listStatus(Path f)
FileStatus[] listStatus(Path[] f)
FileStatus[] listStatus(Path[] files, PathFilter filter)
FileStatus[] listStatus(Path f, PathFilter filter)
RemoteIterator<FileStatus> listStatusIterator(Path p)

形参总结:

  • Path f:路径
  • PathFilter filter:过滤器

返回值:

  • RemoteIterator:返回迭代器

  • FileStatus:可获取权限、所属用户、所属用户组、文件大小、创建时间、上次修改时间、副本数量、block大小、文件全路径名等

  • LocatedFileStatus 是 FileStatus 的子类,有 BlockLocation[] 属性,用于记录 Block 的网络位置,包括块副本所在的主机,与块关联的文件偏移量,长度,是否已损坏等。

java代码

@Test
public void list() throws Exception{
    //获取文件系统
    Configuration configuration = new Configuration();
    FileSystem fs = FileSystem.get(new URI("hdfs://hadoop1:8020"), configuration, "root");

    FileStatus[] array=fs.listStatus(new Path("/"));
    for(FileStatus status:array){
        if(status.isDirectory()){
            System.out.print("d");
        }else{
            System.out.print("-");
        }
        // 权限
        System.out.print(status.getPermission()+"\t");
        // 所属用户
        System.out.print(status.getOwner()+"\t");
        // 所属用户组
        System.out.print(status.getGroup()+"\t");
        // 大小
        System.out.print(status.getLen()+"\t");
        // 上次修改时间
        Date date=new Date(status.getModificationTime());
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm");
        String time=sdf.format(date);
        System.out.print(time+"\t");
        // 副本数量
        System.out.print(status.getReplication()+"\t");
        // block大小
        long size=status.getBlockSize()/1024/1024;
        System.out.print(size+"MB\t");
        // 文件名称
        System.out.print(status.getPath().getName()+"\t");

        System.out.println();
    }
}

原文出处:/show_1IXad4MHBgH.html