文章目录
- 理论
- Configuration
- FileSystem
- FileStatus
- FSDataInputStream
- FSDataOutputStream
- 1、使用系统API实现文件上传
- 2、使用系统API实现文件下载
- 3、目录相关
- 创建目录
- 删除目录
- 4、查看文件详情(名称、权限、大小、块信息等)
- 5、判断是文件还是文件夹
- 4、文件操作
- 判断文件是否存在
- 创建文件
- 删除文件
- 重命名文件
- 向文件中添加内容
- 3、读取文件
- 全部读取
- 定位读取文件:从头开始读取到指定位置
- 定位读取文件:从指定位置开始读取
前置课程:HDFS开发环境搭建
理论 ConfigurationHadoop配置文件管理类,该类的对象封装了客户端或者服务器的配置(配置集群时,所有的xml文件根节点都是configuration),可理解为configuration就是hadoop中的配置信息。 创建一个Configuration对象时,其构造方法会默认加载hadoop中的hdfs-site.xml以及core-site.xml两个配置文件,这两个文件中会有访问hdfs所需的参数值,主要是fs.default.name
,指定了hdfs的地址,有了这个地址客户端就可以通过这个地址访问hdfs了。
该类的对象是一个文件系统对象,对HDFS中的文件进行的一系列操作,如创建等
FileStatus获取文件或者文件夹的元信息!比如:文件路径,文件大小,文件所有者,所在的块大小,文件修改时间,备份数量,权限等
FSDataInputStream输入流对象,利用它可以将HDFS中的文件或者文件夹读取到本地
FSDataOutputStream输出流对象,利用它 可以将本地的文件或者文件夹上传到HDFS中
1、使用系统API实现文件上传@Test
public void uploadFile() throws IllegalArgumentException, IOException {//上传文件到HDFS
fs.copyFromLocalFile(new Path("E:/test/core-site.xml"), new Path("/a.xml"));
}
2、使用系统API实现文件下载
@Test
public void downFile() throws Exception {
fs.copyToLocalFile(false, new Path("/b.xml"), new Path("E:/xqj.txt"));//第一个true表示是"剪切"操作,没有或者false表示复制
}
3、目录相关
创建目录
@Test
public void mkdir() throws IOException {//创建目录
fs.mkdirs(new Path("/user/tt")); //可以同时创建多级目录 /aaa/bbb/ccc
}
删除目录
@Test
public void deleteDir() throws IllegalArgumentException, IOException {
fs.delete(new Path("/user/tt"), false); //delete默认为true,false时只能删除空的文件夹
}
4、查看文件详情(名称、权限、大小、块信息等)
@Test
public void listFiles() throws IOException { //查看文件详情(名称、权限、大小、块信息等)
RemoteIterator iterator = fs.listFiles(new Path("/aa"), true);
while (iterator.hasNext()){
LocatedFileStatus fileStatus = iterator.next();
System.out.println(fileStatus.getPath().getName());
System.out.println(fileStatus.getPermission());
System.out.println(fileStatus.getLen());
BlockLocation[] blockLocations = fileStatus.getBlockLocations();
for (BlockLocation blockLocation : blockLocations) {
String[] hosts = blockLocation.getHosts();
for (String host : hosts) {
System.out.println(host);//副本存储在哪个主机上
}
}
System.out.println("-----------------------------");
}
}
5、判断是文件还是文件夹
@Test
public void fileStatus() throws IOException {
FileStatus[] fileStatuses = fs.listStatus(new Path("/aa"));
for (FileStatus fileStatus : fileStatuses) {
if(fileStatus.isDirectory()){
System.out.println(fileStatus.getPath().getName()+" is folder");
}else if(fileStatus.isFile()){
System.out.println(fileStatus.getPath().getName()+" is file");
}
}
}
4、文件操作
判断文件是否存在
@Test
public void exists() throws IOException {
boolean exists = fs.exists(new Path("/12342.xml"));
if(exists){
System.out.println("文件已经存在");
}else {
System.out.println("文件不存在");
}
}
创建文件
@Test
public void exists() throws IOException {
boolean newFile = fs.createNewFile(new Path("/aa.txt"));
System.out.println(newFile);
}
删除文件
@Test
public void exists() throws IOException {
boolean res = fs.delete(new Path("/aa.txt"),true);
System.out.println(res);
}
重命名文件
@Test
public void rename() throws IOException {
Path src = new Path("/a.xml");
Path aim = new Path("/aa.xml");
fs.rename(src, aim);
}
向文件中添加内容
@Test
public void create() throws IOException {
FSDataOutputStream fos = fs.create(new Path("/a.txt"));
fos.write("hello hadoop".getBytes());
fos.writeUTF("name:zhangsan");
fos.writeChars("age:18");
fos.flush();
fos.close();
}
3、读取文件
全部读取
@Test
public void fileToIO() throws IllegalArgumentException, IOException {//将下载的文件传为流
FSDataInputStream inputStream = fs.open(new Path(file));
IOUtils.copyBytes(inputStream, System.out, 4096, false);//从HDFS中读取文件到本地
}
定位读取文件:从头开始读取到指定位置
@Test
public void getStringByLine() throws IOException {//定位读取
FSDataInputStream dis = fs.open(new Path("/aa.xml"));
BufferedReader br = new BufferedReader(new InputStreamReader(dis));
FileWriter fileWriter = new FileWriter(new File("E:/ss.xml"));
char[] temp = new char[16];
for (int i =0;i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?