好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Java API操作HDFS方法详细讲解

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

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

查看更多关于Java API操作HDFS方法详细讲解的详细内容...

  阅读:13次