Java API 操作 HDFS 文件(三)

简介: Java API 操作 HDFS 文件(三)

删除文件/目录


通过`FileSystem.delete(Path f,Boolean recursive)`可删除指定的 HDFS 文件或目录,其中 `f` 为需要删除文件或目录的完整路径,`recursive` 用来确定是否进行递归删除,若是删除文件则为 `false`,若是删除的是目录则为 `True`。具体实现如下:


packagecom.xiaowang.hdfs;
importjava.io.IOException;
importjava.net.URI;
importjava.net.URISyntaxException;
importorg.apache.hadoop.conf.Configuration;
importorg.apache.hadoop.fs.FileSystem;
importorg.apache.hadoop.fs.Path;
importorg.junit.After;
importorg.junit.Before;
importorg.junit.Test;
publicclassHDFSDemo {
FileSystemfs=null;
// 每次执行单元测试前都会执行该方法@BeforepublicvoidsetUp() throwsIOException, InterruptedException, URISyntaxException {
Configurationconf=newConfiguration();
// 不需要配置“fs.defaultFS”参数,直接传入URI和用户身份,最后一个参数是安装Hadoop集群的用户,我的是“root”fs=FileSystem.get(newURI("hdfs://localhost:9000"), conf, "root");
    }
//单元方法:删除文件或者文件夹@TestpublicvoiddeleteFileOrDir() throwsIllegalArgumentException, IOException{
//删除文件,第二参数:是否递归,若是文件或者空文件夹时可以为false,若是非空文件夹则需要为truefs.delete(newPath("/123/read.txt"),false);
//删除文件夹fs.delete(newPath("/123/data"), true);
    }
// 每次执行单元测试后都会执行该方法,关闭资源@AfterpublicvoidtearDown() {
if (null!=fs) {
try {
fs.close();
            } catch (IOExceptione) {
e.printStackTrace();
            }
        }
    }
}

查看指定路径中文件和块信息

通过`FileSystem.listFiles(Path f,Boolean recursive)`可递归获取指定 HDFS 目录下的所有文件的绝对路径,其中 `f` 为指定路径,`recursive` 用来确定是否进行递归列出。具体实现如下:

importjava.io.FileNotFoundException;
importorg.apache.hadoop.fs.BlockLocation;
importorg.apache.hadoop.fs.LocatedFileStatus;
importorg.apache.hadoop.fs.RemoteIterator;
//单元方法:查看目录信息,只显示该目录下的文件信息@TestpublicvoidlistFiles() throwsFileNotFoundException, IllegalArgumentException, IOException{
//使用迭代器递归获取该目录下的所有文件RemoteIterator<LocatedFileStatus>listfile=fs.listFiles(newPath("/123"), true);
while(listfile.hasNext()){
LocatedFileStatusfileStatus=listfile.next();
System.out.println("文件路径:"+fileStatus.getPath());
System.out.println("文件名称:"+fileStatus.getPath().getName());
System.out.println("块的大小:"+fileStatus.getBlockSize());
System.out.println("文件所有者:"+fileStatus.getOwner());
System.out.println("文件所属组:"+fileStatus.getGroup());
System.out.println("文件权限:"+fileStatus.getPermission());
System.out.println("副本个数:"+fileStatus.getReplication());
System.out.println("文件长度:"+fileStatus.getLen());
System.out.println("-----块的信息-----");
BlockLocation[] blockLocations=fileStatus.getBlockLocations();
for(BlockLocationbLocation:blockLocations){
System.out.println("块的长度:"+bLocation.getLength()+"\t块起始偏移量:"+bLocation.getOffset());
//块所在的DataNode节点String[] hosts=bLocation.getHosts();
System.out.print("DataNode: ");
for(Stringstr:hosts){
System.out.print(str+"\t");
                }
System.out.println();
            }
System.out.println("------------------------");
        }
    }
相关文章
|
1天前
|
安全 Java 开发者
Java一分钟之-文件与目录操作:Path与Files类
【5月更文挑战第13天】Java 7 引入`java.nio.file`包,`Path`和`Files`类提供文件和目录操作。`Path`表示路径,不可变。`Files`包含静态方法,支持创建、删除、读写文件和目录。常见问题包括:忽略异常处理、路径解析错误和权限问题。在使用时,注意异常处理、正确格式化路径和考虑权限,以保证代码稳定和安全。结合具体需求,这些方法将使文件操作更高效。
10 2
|
1天前
|
Java API
Java一分钟之-Java日期与时间API:LocalDate, LocalDateTime
【5月更文挑战第13天】Java 8引入`java.time`包,改进日期时间API。`LocalDate`代表日期,`LocalDateTime`包含日期和时间。本文概述两者的基本用法、常见问题及解决策略。创建日期时间使用`of()`和`parse()`,操作日期时间有`plusDays()`、`minusMonths()`等。注意点包括:设置正确的`DateTimeFormatter`,考虑闰年影响,以及在需要时区信息时使用`ZonedDateTime`。正确使用这些类能提升代码质量。
9 3
|
1天前
|
Java API 数据处理
Java一分钟之-Stream API:数据处理新方式
【5月更文挑战第13天】Java 8的Stream API为集合操作提供了声明式编程,简化数据处理。本文介绍了Stream的基本概念、常见问题和易错点。问题包括并行流与顺序流的区别,状态改变操作的影响,以及忘记调用终止操作和误用`peek()`。理解并合理使用Stream API能提升代码效率和可维护性。实践中不断探索,将发掘更多Stream API的潜力。
11 3
|
1天前
|
Java ice
【Java开发指南 | 第二十一篇】Java流之文件
【Java开发指南 | 第二十一篇】Java流之文件
8 0
|
1天前
|
安全 Java API
Java Stream API详解与使用
Java Stream API是Java 8引入的特性,提供函数式操作处理集合,支持链式操作和并行处理,提升代码可读性和性能。关键点包括:延迟执行的中间操作(如filter, map)和触发计算的终端操作(如collect, forEach)。示例展示了如何从Person列表过滤出年龄大于20的姓名并排序。使用Stream时注意避免中间操作的副作用,终端操作后Stream不能复用,以及并行操作的线程安全性。
|
2天前
|
安全 Java 数据安全/隐私保护
Java一分钟之-Java反射机制:动态操作类与对象
【5月更文挑战第12天】本文介绍了Java反射机制的基本用法,包括获取Class对象、创建对象、访问字段和调用方法。同时,讨论了常见的问题和易错点,如忽略访问权限检查、未捕获异常以及性能损耗,并提供了相应的避免策略。理解反射的工作原理和合理使用有助于提升代码灵活性,但需注意其带来的安全风险和性能影响。
17 4
|
2天前
|
Java 程序员 API
Java 8新特性之Lambda表达式与Stream API的深度解析
【5月更文挑战第12天】本文将深入探讨Java 8中的两个重要新特性:Lambda表达式和Stream API。我们将从基本概念入手,逐步深入到实际应用场景,帮助读者更好地理解和掌握这两个新特性,提高Java编程效率。
40 2
|
4天前
|
Java 开发者
Java一分钟之-Java IO流:文件读写基础
【5月更文挑战第10天】本文介绍了Java IO流在文件读写中的应用,包括`FileInputStream`和`FileOutputStream`用于字节流操作,`BufferedReader`和`PrintWriter`用于字符流。通过代码示例展示了如何读取和写入文件,强调了常见问题如未关闭流、文件路径、编码、权限和异常处理,并提供了追加写入与读取的示例。理解这些基础知识和注意事项能帮助开发者编写更可靠的程序。
16 0
|
4天前
|
Java API
Java操作elasticsearch
Java操作elasticsearch
8 0
|
4天前
|
NoSQL Java Redis
在Java中操作Redis
在Java中操作Redis
7 0