Java API操作HDFS方法详细讲解

 更新时间:2023年02月20日 08:29:14   作者:X_Serendipity  
这篇文章主要介绍了Java API操作Hdfs详细示例,遍历当前目录下所有文件与文件夹,可以使用listStatus方法实现上述需求,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下

一、判断Path指向目录还是文件

net.xxr.hdfs包里创建PathToFileOrDir

package net.xxr.hdfs;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.net.URI;
/**
 * 功能:判断路径指向目录还是文件
 */
public class PathToFileOrDir {
    public static void main(String[] args) throws Exception {
        // 创建配置对象
        Configuration conf = new Configuration();
        // 设置数据节点主机名属性
        conf.set("dfs.client.use.datanode.hostname", "true");
        // 定义uri字符串
        String uri = "hdfs://master:9000";
        // 创建文件系统对象
        FileSystem fs = FileSystem.get(new URI(uri), conf, "root");
        // 创建路径对象,指向目录
        Path path1 = new Path("/ied01");
        if (fs.isDirectory(path1)) {
            System.out.println("[" + path1 + "]指向的是目录!");
        } else {
            System.out.println("[" + path1 + "]指向的是文件!");
        }
        // 创建路径对象,指向文件
        Path path2 = new Path("/lzy01/test2.txt");
        if (fs.isFile(path2)) {
            System.out.println("[" + path2 + "]指向的是文件!");
        } else {
            System.out.println("[" + path2 + "]指向的是目录!");
        }
    }
}

结果

二、删除目录或文件

net.xxr.hdfs包里创建DeleteFileOrDir

1、删除文件

  • 删除/lzy/hello.txt文件
  • 编写deleteFile()方法
package net.xxr.hdfs;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.Test;
import java.net.URI;
/**
 * 功能:删除目录或文件
 */
public class DeleteFileOrDir {
    @Test
    public void deleteFile() throws Exception {
        // 创建配置对象
        Configuration conf = new Configuration();
        // 设置数据节点主机名属性
        conf.set("dfs.client.use.datanode.hostname", "true");
        // 定义uri字符串
        String uri = "hdfs://master:9000";
        // 创建文件系统对象
        FileSystem fs = FileSystem.get(new URI(uri), conf, "root");
        // 创建路径对象(指向文件)
        Path path = new Path(uri + "/lzy01/hello.txt");
        // 删除路径对象指向的文件(第二个参数表明是否递归,删除文件,不用递归)
        boolean result = fs.delete(path, false);
        // 根据返回结果提示用户
        if (result) {
            System.out.println("文件[" + path + "]删除成功!");
        } else {
            System.out.println("文件[" + path + "]删除失败!");
        }
    }
}

结果

利用Hadoop WebUI界面查看

再运行deleteFile()测试方法,查看结果

可以在删除文件之前,判断文件是否存在,需要修改代码

package net.xxr.hdfs;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.Test;
import java.net.URI;
/**
 * 功能:删除目录或文件
 */
public class DeleteFileOrDir {
    @Test
    public void deleteFile() throws Exception {
        // 创建配置对象
        Configuration conf = new Configuration();
        // 设置数据节点主机名属性
        conf.set("dfs.client.use.datanode.hostname", "true");
        // 定义uri字符串
        String uri = "hdfs://master:9000";
        // 创建文件系统对象
        FileSystem fs = FileSystem.get(new URI(uri), conf, "root");
        // 创建路径对象(指向文件)
        Path path = new Path(uri + "/lzy01/hi.txt");
        // 判断路径对象指向的文件是否存在
        if (fs.exists(path)) {
            // 删除路径对象指向的文件(第二个参数表明是否递归,删除文件,不用递归)
            boolean result = fs.delete(path, false);
            // 根据返回结果提示用户
            if (result) {
                System.out.println("文件[" + path + "]删除成功!");
            } else {
                System.out.println("文件[" + path + "]删除失败!");
            }
        } else {
            System.out.println("文件[" + path + "]不存在!");
        }
    }
}

结果

2、删除目录

  • 删除/ied01目录
  • 编写deleteDir()方法
@Test
    public void deleteDir() throws Exception {
        // 创建配置对象
        Configuration conf = new Configuration();
        // 设置数据节点主机名属性
        conf.set("dfs.client.use.datanode.hostname", "true");
        // 定义uri字符串
        String uri = "hdfs://master:9000";
        // 创建文件系统对象
        FileSystem fs = FileSystem.get(new URI(uri), conf, "root");
        // 创建路径对象(指向目录)
        Path path = new Path(uri + "/ied01");
        // 判断路径对象指向的目录否存在
        if (fs.exists(path)) {
            // 删除路径对象指向的目录(第二个参数表明是否递归,删除文件,要递归)
            boolean result = fs.delete(path, true);
            // 根据返回结果提示用户
            if (result) {
                System.out.println("目录[" + path + "]删除成功!");
            } else {
                System.out.println("目录[" + path + "]删除失败!");
            }
        } else {
            System.out.println("目录[" + path + "]不存在!");
        }
    }

再运行deleteDir()方法,查看结果

3、删除目录或文件

  • 进行三个层面的判断:判断类型(目录或文件)、判断是否存在、判断删除是否成功
  • 删除/ied03/exam.txt文件和/ied02目录
  • 编写delete()方法
@Test
    public void delete() throws Exception {
        // 创建配置对象
        Configuration conf = new Configuration();
        // 设置数据节点主机名属性
        conf.set("dfs.client.use.datanode.hostname", "true");
        // 定义uri字符串
        String uri = "hdfs://master:9000";
        // 创建文件系统对象
        FileSystem fs = FileSystem.get(new URI(uri), conf, "root");
        // 定义随机对象
        Random random = new Random();
        // 产生随机整数 - [0, 1]
        int choice = random.nextInt(100) % 2;
        // 定义路径字符串
        String[] strPath = {"/ied03/exam.txt", "/ied02"};
        // 创建路径对象(指向目录或文件)
        Path path = new Path(uri + strPath[choice]);
        // 判断类型:目录或文件
        String type = "";
        if (fs.isDirectory(path)) {
            type = "目录";
        } else {
            type = "文件";
        }
        // 判断存在性
        if (fs.exists(path)) {
            // 删除路径对象指向的目录或文件
            boolean result = fs.delete(path, true);
            // 判断删除是否成功
            if (result) {
                System.out.println(type + "[" + path + "]删除成功!");
            } else {
                System.out.println(type + "[" + path + "]删除失败!");
            }
        } else {
            System.out.println(type + "[" + path + "]不存在!");
        }
    }

到此这篇关于Java API操作HDFS方法详细讲解的文章就介绍到这了,更多相关Java API操作HDFS内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Springboot整合PageOffice 实现word在线编辑保存功能

    Springboot整合PageOffice 实现word在线编辑保存功能

    这篇文章主要介绍了Springboot整合PageOffice 实现word在线编辑保存,本文以Samples5 为示例文件结合示例代码给大家详细介绍,需要的朋友可以参考下
    2021-08-08
  • SpringBoot微服务注册分布式Consul的详细过程

    SpringBoot微服务注册分布式Consul的详细过程

    这篇文章主要介绍了SpringBoot(微服务)注册分布式Consul,Spring Boot应用可以通过向Consul注册自身来实现服务发现和治理,使得其他服务可以在Consul中发现并调用它,需要的朋友可以参考下
    2023-04-04
  • java使用minio上传下载文件完整版教程

    java使用minio上传下载文件完整版教程

    本示例教程介绍了如何使用SpringBoot框架结合MinIO服务实现文件的上传和下载功能,并将文件信息存储在数据库的file表中,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-09-09
  • SpringBoot打印POST请求原始入参body体方式

    SpringBoot打印POST请求原始入参body体方式

    这篇文章主要介绍了SpringBoot打印POST请求原始入参body体方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • java项目实现猜拳小游戏

    java项目实现猜拳小游戏

    这篇文章主要为大家详细介绍了java项目实现猜拳小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • MyBatis接口的简单实现原理分析

    MyBatis接口的简单实现原理分析

    这里仅仅举个简单例子来说明原理,不是完全针对MyBatis的,这种思想我们也可以应用在其他地方。地mybatis接口实现原理感兴趣的朋友一起看看吧
    2017-07-07
  • 浅谈java对象转json,数字精确出现丢失问题

    浅谈java对象转json,数字精确出现丢失问题

    下面小编就为大家带来一篇浅谈java对象转json, 数字精确出现丢失问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • Java生成指定范围内的一个随机整数2种方式

    Java生成指定范围内的一个随机整数2种方式

    本文主要介绍了Java生成指定范围内的一个随机整数2种方式,主要使用Math.random()和Random.nextInt()这两种,具有一定的参考价值,感兴趣的可以了解一下
    2023-04-04
  • Java的MyBatis+Spring框架中使用数据访问对象DAO模式的方法

    Java的MyBatis+Spring框架中使用数据访问对象DAO模式的方法

    Data Access Object数据访问对象模式在Java操作数据库部分的程序设计中经常被使用到,这里我们就来看一下Java的MyBatis+Spring框架中使用数据访问对象DAO模式的方法:
    2016-06-06
  • jdbc+jsp实现简单员工管理系统

    jdbc+jsp实现简单员工管理系统

    这篇文章主要为大家详细介绍了jdbc+jsp实现简单员工管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02

最新评论