服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - Java API操作HDFS方法详细讲解

Java API操作HDFS方法详细讲解

2023-02-26 15:44X_Serendipity Java教程

这篇文章主要介绍了Java API操作Hdfs详细示例,遍历当前目录下所有文件与文件夹,可以使用listStatus方法实现上述需求,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下

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

在net.xxr.hdfs包里创建PathToFileOrDir类

Java API操作HDFS方法详细讲解

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 + "]指向的是目录!");
      }
  }
}

结果

Java API操作HDFS方法详细讲解

 

二、删除目录或文件

在net.xxr.hdfs包里创建DeleteFileOrDir类

Java API操作HDFS方法详细讲解

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 + "]删除失败!");
      }
  }
}

结果

Java API操作HDFS方法详细讲解

利用Hadoop WebUI界面查看

Java API操作HDFS方法详细讲解

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

Java API操作HDFS方法详细讲解

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

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 + "]不存在!");
      }
  }
}

结果

Java API操作HDFS方法详细讲解

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 + "]不存在!");
      }
  }

Java API操作HDFS方法详细讲解

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

Java API操作HDFS方法详细讲解

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内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/X_Serendipity/article/details/128196519

延伸 · 阅读

精彩推荐
  • Java教程spring使用ehcache实现页面缓存示例

    spring使用ehcache实现页面缓存示例

    这篇文章主要介绍了spring使用ehcache实现页面缓存示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    ctxsdhy4442020-08-18
  • Java教程Spring Boot中@RequestParam参数的5种情况说明

    Spring Boot中@RequestParam参数的5种情况说明

    这篇文章主要介绍了Spring Boot中@RequestParam参数的5种情况说明,具有很好的参考价值,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的...

    han11405217925642021-11-30
  • Java教程SpringBoot整合POI导出通用Excel的方法示例

    SpringBoot整合POI导出通用Excel的方法示例

    这篇文章主要介绍了SpringBoot整合POI导出通用Excel的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的...

    mengdi_cao4112020-08-24
  • Java教程浅说Synchronized的底层实现原理

    浅说Synchronized的底层实现原理

    synchronized关键字用来保证在同一时刻只有一个线程可以执行被它修饰的变量或者代码块。...

    java小当家9102021-01-08
  • Java教程Java try-catch-finally异常处理机制详解

    Java try-catch-finally异常处理机制详解

    这篇文章主要介绍了Java try-catch-finally异常处理机制详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...

    StarHai8152021-11-14
  • Java教程深入分析Java异常

    深入分析Java异常

    本篇文章给大家详细分享了关于Java异常的相关知识点,对此有需要的朋友跟着学习下吧。...

    scu酱油仔4452021-05-03
  • Java教程Spring切入点表达式配置过程图解

    Spring切入点表达式配置过程图解

    这篇文章主要介绍了Spring切入点表达式配置过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以...

    七月在野,八月在宇5732020-08-02
  • Java教程JAVA SpringBoot统一日志处理原理详解

    JAVA SpringBoot统一日志处理原理详解

    这篇文章主要介绍了SpringBoot的统一日志处理原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面...

    面试秘籍Java8342021-12-15