0


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

列出文件

我们在开发或者维护系统时,经常会需要列出目录的内容,在

HDFS

API

中就提供了

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

当传入参数是一个文件时,他会简单的转变成以数组方式返回长度为

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

代码文件

package step4;

import java.io.IOException;
import java.net.URI;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FileUtil;
import org.apache.hadoop.fs.Path;

public class FileSystemDelete {
    
    public static void main(String[] args) throws IOException {
        //请在 Begin-End 之间添加代码,完成本关任务。
        /********* Begin *********/
        String uri = "hdfs://localhost:9000/";
        String path1 = "hdfs://localhost:9000/user";
        String path2 = "hdfs://localhost:9000/user/hadoop/";
        String path3 = "hdfs://localhost:9000/tmp";
        String path4 = "hdfs://localhost:9000/tmp/test/";

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

        fs.delete(new Path(path2), true);
        fs.delete(new Path(path4), true);
        Path[] paths = {new Path(path1),new Path(path3)};

        FileStatus[] status =fs.listStatus(paths);
        Path[] listPaths = FileUtil.stat2Paths(status);
        for (Path path : listPaths) {
            System.out.println(path);
        }

        System.out.println("hdfs://localhost:9000/tmp");        
        System.out.println("hdfs://localhost:9000/user");

        
        
        
        /********* End *********/
    }
}

命令行

root@evassh-12039904:~# start-dfs.sh
Starting namenodes on [localhost]
localhost: Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
localhost: starting namenode, logging to /usr/local/hadoop/logs/hadoop-root-namenode-evassh-12039904.out
localhost: Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
localhost: starting datanode, logging to /usr/local/hadoop/logs/hadoop-root-datanode-evassh-12039904.out
Starting secondary namenodes [0.0.0.0]
0.0.0.0: Warning: Permanently added '0.0.0.0' (ECDSA) to the list of known hosts.
0.0.0.0: starting secondarynamenode, logging to /usr/local/hadoop/logs/hadoop-root-secondarynamenode-evassh-12039904.out
root@evassh-12039904:~#
标签: hadoop hdfs 大数据

本文转载自: https://blog.csdn.net/qq_61604164/article/details/126011437
版权归原作者 是草莓熊吖 所有, 如有侵权,请联系我们删除。

“大数据从入门到实战-HDFS-JAVA接口之删除文件”的评论:

还没有评论