Filesystem查询文件系统之列出文件。

        查找一个文件或目录相关的信息很实用,但通常还需要能够列出目录中的内容。

        这就是FileSystem的listStatus()方法的功能:

  • public FileStatus[] listStatus(Path f) throws IOException
  • public FileStatus[] listStatus(Path f, PathFilter filter) throws IOException
  • public FileStatus[] listStatus(Path[] files) throws IOException
  • public FileStatus[] listStatus(Path[] files, PathFilter filter) throws IOException

        当传入的参数是一个文件时,他会简单转变成以数组方式返回长度为1的FileStatus对象。当传入参数是一个目录时,则返回0或多个FileStatus对象,表示此目录中包含的文件和目录。

        他的重载方法允许使用PathFilter来限制匹配的文件和目录。最后如果指定一组路径,其执行结果相当于依次轮流传递每条路径并对其调用listStatus()方法,再将FileStatus对象数组累积存入同一数组中,但该方法更为方便。在从我呢见系统树的不同分支构建输入文件列表时,这是很有用的。下面简单显示了这个方法。注意Hadoop的FileUtil中stat2Paths()方法的使用,他将一个FileStatus对象数组转换为一个Path对象数组。

// 显示Hadoop文件系统中一组路径的文件信息

pubilic static void main(String[] args) throws Exception {

String uri = args[0];

Configuration conf = new Configuration();

FileSystem fs = FileSystem.get(URI,create(uri), conf);


Path[] paths = new Path[args.length];

for (int i = 0; i < paths.length; i ++) {

paths[i] = new Path(rags[i]);

}

FileStatus[] status = fs.listStatus(paths);

Path[] listedPaths = FileUtils.stat2Paths(status);

for (Path p : listedPaths) {

System.out.println(p);

}

}

        我们可以用这个程序来显示一组路径集目录列表的并集:

% hadoop ListStatus hdfs://localhost/ hdfs://localhost/user/tom

hdfs://localhost/user

hdfs://localhost/user/tom/books

hdfs://localhost/user/tom/quangle.txt

你可能感兴趣的:(#,Hadoop)