hadoop3.x HDFS java显示给定目录下的文件、目录信息(FileSystem的listLocatedStatus、listStatus、listStatusIterator方法) 作者:马育民 • 2021-02-14 11:41 • 阅读:10174 # 介绍 FileSystem 的 这几个方法,功能类似,都是 **显示给定目录下的文件、目录信息**,**只是 形参、返回值 不同** ``` RemoteIterator listLocatedStatus(Path f) ``` ``` RemoteIterator 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 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(); } } ``` 原文出处:http://malaoshi.top/show_1IXad4MHBgH.html