第4关:HDFS-JAVA接口之删除文件

任务描述

本关任务:删除HDFS中的文件和文件夹。

相关知识

为了完成本关任务,你需要掌握:1.如何使用API来删除文件,2.如何列出指定目录下的文件和文件夹。

列出文件

我们在开发或者维护系统时,经常会需要列出目录的内容,在HDFSAPI中就提供了listStatus()方法来实现该功能。

  1. public FileStatus[] listStatus(Path f)throws IOException
  2. public FileStatus[] listStatus(Path f,PathFilter filter)throws IOException
  3. public FileStatus listStatus(Path[] files)throws IOException
  4. public FileStatus() listStatus(Path[] files,PathFilter filter)throws IOException

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

接下来通过一个例子,来体验一下listStatus()方法的使用:

在命令行启动hadoop,编写代码,点击评测可以直接查看结果。

显示了hdfs根目录下的文件夹与user目录下的文件夹。

删除文件

使用FileSystemdelete()方法可以永久性删除文件或目录。

  1. public boolean delete(Path f,boolean recursive)throws IOException

如果f是一个文件或者空目录,那么recursive的值可以忽略,当recursize的值为true,并且p是一个非空目录时,非空目录及其内容才会被删除(否则将会抛出IOException异常)。

接下来我们通过一个例子,来查看该方法如何使用。

编写代码,点击评测,可以看到如下结果:

可以看到/user/hadoop/目录已经被删除了。

编程要求

在右侧代码区填充代码,实现如下功能:

  • 删除HDFS/user/hadoop/目录(空目录);
  • 删除HDFS/tmp/test/目录(非空目录);
  • 列出HDFS根目录下所有的文件和文件夹;
  • 列出HDFS/tmp/的所有文件和文件夹。
public class FileSystemDelete { 
public static void main(String[] args) throws IOException {
	//请在 Begin-End 之间添加代码,完成本关任务。
    /********* Begin *********/
    String hadoop = "hdfs://localhost:9000/user/hadoop";
    String test = "hdfs://localhost:9000/tmp/test";
    String root = "hdfs://localhost:9000/";
    String tmp = "hdfs://localhost:9000/tmp";

    Configuration config = new Configuration();
    FileSystem fs = FileSystem.get(URI.create(root), config);

    fs.delete(new Path(hadoop), true);
    fs.delete(new Path(test), true);

    Path[] paths = {new Path(root), new Path(tmp)};
    FileStatus[] status = fs.listStatus(paths);
    Path[] listPaths = FileUtil.stat2Paths(status);

    for (Path path: listPaths) {
        System.out.println(path);
    }
	/********* End *********/
}
}

测试说明

HDFS的文件夹在你点击评测是会通过脚本自动创建,不需要你自己创建哦,依照题意编写代码点击评测即可。

预期输出:


开始你的任务吧,祝你成功!


版权声明:本文为qq_51916951原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。