任务描述
本关任务:删除HDFS中的文件和文件夹。
相关知识
为了完成本关任务,你需要掌握:1.如何使用API来删除文件,2.如何列出指定目录下的文件和文件夹。
列出文件
我们在开发或者维护系统时,经常会需要列出目录的内容,在HDFS的API中就提供了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 ———————————————— 版权声明:本文为CSDN博主「真题OK撒」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_51916951/article/details/123585393
当传入参数是一个文件时,他会简单的转变成以数组方式返回长度为1
的FileStatus
对象,当传入参数是一个目录时,则返回0
或多个FileStatus
对象,表示此目录中包含的文件和目录。
接下来通过一个例子,来体验一下listStatus()
方法的使用:
在命令行启动hadoop
,编写代码,点击评测可以直接查看结果。
显示了hdfs
根目录下的文件夹与user
目录下的文件夹。
删除文件
使用FileSystem
的delete()
方法可以永久性删除文件或目录。
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
的文件夹在你点击评测是会通过脚本自动创建,不需要你自己创建哦,依照题意编写代码点击评测即可。
预期输出:
开始你的任务吧,祝你成功!