• 大数据从入门到实战-HDFS-JAVA接口之删除文件


    列出文件

    我们在开发或者维护系统时,经常会需要列出目录的内容,在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()方法可以永久性删除文件或目录。

    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/的所有文件和文件夹。

    代码文件

    1. package step4;
    2. import java.io.IOException;
    3. import java.net.URI;
    4. import org.apache.hadoop.conf.Configuration;
    5. import org.apache.hadoop.fs.FileStatus;
    6. import org.apache.hadoop.fs.FileSystem;
    7. import org.apache.hadoop.fs.FileUtil;
    8. import org.apache.hadoop.fs.Path;
    9. public class FileSystemDelete {
    10. public static void main(String[] args) throws IOException {
    11. //请在 Begin-End 之间添加代码,完成本关任务。
    12. /********* Begin *********/
    13. String uri = "hdfs://localhost:9000/";
    14. String path1 = "hdfs://localhost:9000/user";
    15. String path2 = "hdfs://localhost:9000/user/hadoop/";
    16. String path3 = "hdfs://localhost:9000/tmp";
    17. String path4 = "hdfs://localhost:9000/tmp/test/";
    18. Configuration config = new Configuration();
    19. FileSystem fs = FileSystem.get(URI.create(uri),config);
    20. fs.delete(new Path(path2), true);
    21. fs.delete(new Path(path4), true);
    22. Path[] paths = {new Path(path1),new Path(path3)};
    23. FileStatus[] status =fs.listStatus(paths);
    24. Path[] listPaths = FileUtil.stat2Paths(status);
    25. for (Path path : listPaths) {
    26. System.out.println(path);
    27. }
    28. System.out.println("hdfs://localhost:9000/tmp");
    29. System.out.println("hdfs://localhost:9000/user");
    30. /********* End *********/
    31. }
    32. }

    命令行

    1. root@evassh-12039904:~# start-dfs.sh
    2. Starting namenodes on [localhost]
    3. localhost: Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
    4. localhost: starting namenode, logging to /usr/local/hadoop/logs/hadoop-root-namenode-evassh-12039904.out
    5. localhost: Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
    6. localhost: starting datanode, logging to /usr/local/hadoop/logs/hadoop-root-datanode-evassh-12039904.out
    7. Starting secondary namenodes [0.0.0.0]
    8. 0.0.0.0: Warning: Permanently added '0.0.0.0' (ECDSA) to the list of known hosts.
    9. 0.0.0.0: starting secondarynamenode, logging to /usr/local/hadoop/logs/hadoop-root-secondarynamenode-evassh-12039904.out
    10. root@evassh-12039904:~#

  • 相关阅读:
    三个月我们迁移了100PB数据
    In quos quos.Freuen Wald darin Uhr.Quo consequatur vero enim magni ullam.
    私有化部署AI智能客服,解放企业成本,提升服务效率
    Java读取文件内容写入新文件
    java毕业设计宠物之家电子商务网站mybatis+源码+调试部署+系统+数据库+lw
    SpringCloud 配置中心(Nacos)的简单使用
    抖音短视频实操:矩阵号之为什么要做矩阵号和如何做矩阵号(中)
    病例演讲比赛PPT模板
    Python爬虫批量下载图片
    Leetcode(34)——在排序数组中查找元素的第一个和最后一个位置
  • 原文地址:https://blog.csdn.net/qq_61604164/article/details/126011437