介绍
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://localhost:9000"), 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();
}
}