8.Java API 操作 HDFS 文件(二)
任务目的
- 学会使用 Java API 将 HDFS 文件下载到本地指定位置
- 掌握对 HDFS 文件或目录重命名的使用方法
- 学会使用 Java API 查看指定 HDFS 中某个目录下所有的文件或文件夹
任务清单
- 任务1:下载文件
- 任务2:重命名文件/目录
- 任务3:查看文件/目录状态
详细任务步骤
任务1:下载文件
通过FileSystem.copyToLocalFile(Path src,Patch dst)
可将 HDFS 文件下载到本地的指定位置上,其中 src
和 dst
均为文件的完整路径。具体实现如下:
package com.hongyaa.hdfs;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class HDFSDemo {
FileSystem fs = null;
// 每次执行单元测试前都会执行该方法
@Before
public void setUp() throws IOException, InterruptedException, URISyntaxException {
Configuration conf = new Configuration();
// 不需要配置“fs.defaultFS”参数,直接传入URI和用户身份,最后一个参数是安装Hadoop集群的用户,我的是“root”
fs = FileSystem.get(new URI("hdfs://localhost:9000"), conf, "root");
}
// 单元方法:下载文件
@Test
public void downLoadFileToLocal() throws IOException {
/*
* src:要下载的文件所在的HDFS路径 dst:要下载到本地的目标路径
*/
Path src = new Path("/123/README.txt");
Path dst = new Path("/root");
// 默认不删除HDFS源路径的文件,覆盖本地同名文件
fs.copyToLocalFile(src, dst);
}
// 每次执行单元测试后都会执行该方法,关闭资源
@After
public void tearDown() {
if (null != fs) {
try {
fs.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
查看本地文本系统 /root 目录,存在 README.txt 文件说明下载成功:
图1
任务2:重命名文件/目录
通过FileSystem.rename(Path arg0,Path arg1)
可对 HDFS 文件或目录进行重命名,其中 arg0
和 arg1
均为 HDFS 文件或目录的完整路径。具体实现如下:
// 单元方法:重命名文件或者文件夹
@Test
public void renameFileOrDir() throws IllegalArgumentException, IOException {
//重命名文件
fs.rename(new Path("/123/README.txt"), new Path("/123/read.txt"));
//重命名文件夹
fs.rename(new Path("/123/1"), new Path("/123/data"));
}
执行结果如下所示:
图2
任务3:查看文件/目录状态
通过FileStatus.getPath()
可查看指定 HDFS 中某个目录下所有文件或文件夹,具体实现如下:
import java.io.FileNotFoundException;
import org.apache.hadoop.fs.FileStatus;
//单元方法:查看文件及文件夹信息
@Test
public void listStatus() throws FileNotFoundException, IllegalArgumentException, IOException{
//使用listStatus()方法获得参数中指定目录下文件和文件夹的元数据信息(文件(夹)名称、路径、长度等),存放在一个数组中
FileStatus[] listStatus = fs.listStatus(new Path("/123"));
String flag="";
for(FileStatus status:listStatus){
if(status.isDirectory()){
flag="Directory";
}else {
flag="File";
}
System.out.println(flag+":"+status.getPath().getName());
}
}
执行结果如下所示:
图3
标签:,HDFS,fs,文件,new,import,Path From: https://www.cnblogs.com/Cuckoo123456/p/17470436.html