这篇“Java API操作HDFS方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java API操作HDFS方法是什么”文章吧。
在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 path2 = new Path("/ied01");
if (fs.isDirectory(path2)) {
System.out.println("[" + path2 + "]指向的是目录!");
} else {
System.out.println("[" + path2 + "]指向的是文件!");
}
// 创建路径对象,指向文件
Path path3 = new Path("/lzy01/test2.txt");
if (fs.isFile(path3)) {
System.out.println("[" + path3 + "]指向的是文件!");
} else {
System.out.println("[" + path3 + "]指向的是目录!");
}
}
}
结果
在net.xxr.hdfs
包里创建DeleteFileOrDir
类
删除/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 + "]不存在!");
}
}
}
结果
删除/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()
方法,查看结果
进行三个层面的判断:判断类型(目录或文件)、判断是否存在、判断删除是否成功
删除/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方法是什么”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。