hdfsClient_java对hdfs进行上传、下载、删除、移动、打印文件信息尚硅谷大海哥

news/2024/5/20 4:03:01 标签: java, hdfs, 开发语言

Java可以通过Hadoop提供的HDFS Java API来控制HDFS。通过HDFS Java API,可以实现对HDFS的文件操作,包括文件的创建、读取、写入、删除等操作。

具体来说,Java可以通过HDFS Java API来创建一个HDFS文件系统对象,然后使用该对象来进行文件的操作。例如,可以使用FileSystem类的create()方法来创建一个新的文件,使用open()方法来打开一个文件进行读取,使用write()方法来向文件中写入数据,使用delete()方法来删除一个文件等。

此外,Java还可以通过HDFS Java API来管理HDFS的元数据信息,包括文件的权限、所有者、修改时间等信息。通过FileSystem类的setPermission()、setOwner()、setTimes()等方法,可以对文件的元数据信息进行修改。

前提:
配置HADOOP_HOME环境变量

配置Path环境变量

Maven依赖成功导入

(这三个不会的评论区评论我发资料给你)

代码:

java">package com.huangyongsheng.hdfs;
import java.io.IOException;
import java.io.InputStream;
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.LocatedFileStatus;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.RemoteIterator;
import org.apache.hadoop.io.IOUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

/**
 * 客户端代码常用套路
 * 1,获取客户端对象
 * 2.执行操作
 * 3.关闭资源
 * HDFS zookeeper
 */
public class HdfsClient {
    private FileSystem fs;
    @Before
    public void init() throws URISyntaxException, IOException, InterruptedException {
        URI uri = new URI("hdfs://hadoop102:8020");
        Configuration configuration = new Configuration();
        String user="huangyongsheng";
        fs = FileSystem.get(uri, configuration, user);
    }
    @After
    public void close() throws IOException {
        fs.close();
    }
    @Test
    //创建目录
    public void testmkdir() throws URISyntaxException, IOException, InterruptedException {
        fs.mkdirs(new Path("/xiyuo/huaguoshan2"));
        System.out.println("目录创建成功");
    }
    @Test
    //上传;是否删除原数据;是否覆盖;原数据路径;目的路径
    public void testPut() throws IOException {
        fs.copyFromLocalFile(false,false,new Path("D:\\sun_wu_kong.txt"),new Path("/xiyuo/huaguoshan"));
    }
    @Test
    //下载;是否删除原数据;hdfs文件路径;win路径;是否校验(不用)
    public void  testGet() throws IOException {
//        fs.copyToLocalFile(false,new Path(""),new Path(""));
        InputStream in =fs.open(new Path("/dancijishu/wcinput/word1.txt"));
        IOUtils.copyBytes(in,System.out,4096,false);
        IOUtils.closeStream(in);
    }
    @Test
    //删除;删除文件,目录,非空目录(需要参数true)是否递归删除
    public void testRm() throws IOException {
        fs.delete(new Path(""),false);
    }
    @Test
    //文件的更名和移动
    public void testmv() throws IOException {
        fs.rename(new Path("/xiyuo/huaguoshan2"),new Path("/xiyuo/huaguoshan_namechanged"));
        // rename可以移动文件并改名      原文件路径(路径里的文件)                   一个新的路径(路径里的文件)
    }
    @Test
    //获取文件详情
    public void fileDetail() throws IOException {
        //获取所有文件信息                  迭代器
        RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/"),true);
        while (listFiles.hasNext()){
            LocatedFileStatus fileStatus = listFiles.next();
            System.out.println("===================="+fileStatus.getPath()+"====================");
            System.out.println(fileStatus.getPermission());
            System.out.println(fileStatus.getOwner());
            System.out.println(fileStatus.getGroup());
            System.out.println(fileStatus.getLen());
            System.out.println(fileStatus.getModificationTime());
            System.out.println(fileStatus.getReplication());
            System.out.println(fileStatus.getPath().getName());
        }
    }
}


http://www.niftyadmin.cn/n/5201527.html

相关文章

MySQL之JDBC编程

目录 1. 数据库编程的必备条件 2. Java的数据库编程&#xff1a;JDBC 3. JDBC工作原理 4. JDBC使用 4.1 IDEA配置JDBC 4.2 JDBC开发案例 4.3 JDBC使用步骤总结 5. JDBC常用接口和类 5.1 JDBC API 5.2 数据库连接Connection 5.3 Statement对象 5.4 ResultS…

综述--知识蒸馏

2.1 知识蒸馏的概念和目标 知识蒸馏是一种用于提高深度神经网络性能的技术&#xff0c;它通过从一个预先训练好的“教师网络”中传输知识到一个“学生网络”中来实现。教师网络通常具有更大的规模和更高的性能&#xff0c;而学生网络则是一个较小的网络&#xff0c;旨在在拥有…

nginx中将指定文件夹设置为虚拟目录

记得目录后面要加个斜杠“/"。 话说&#xff0c;我们系统有照相机和摄像头&#xff0c;可以产生照片和视频。通过nginx将照片和视频所在文件夹映射为虚拟目录&#xff0c;外部即可访问。 如何映射&#xff08;或曰&#xff0c;转发&#xff09;呢&#xff1f;这样写&…

前端环境变量释义import.meta.env.xxx

视频教程 彻底搞懂前端环境变量使用和原理&#xff0c;超清楚_哔哩哔哩_bilibili 添加命令行参数 --modexxxxx 新建.env.xxxx文件,其中.env文件会在所有环境下生效 以VITE_开头&#xff0c;字符串无需加双引号 使用import.meta.env.VITE_xxxxx进行调用

线性表--栈-1

文章目录 主要内容一.栈基础练习题1.设链表不带头结点且所有操作均在表头进行&#xff0c;则下列最不适合作为链栈的是 ( C )。解析如下&#xff08;示例&#xff09;: 2.一个栈的入栈序列为 1,2,3,..,n,出栈序列是P1,P2,P3,...,Pn。若P23&#xff0c;则P3可能取值的个数是( C …

【前端学java】java中的Object类(8)

往期回顾&#xff1a; 【前端学java】JAVA开发的依赖安装与环境配置 &#xff08;0&#xff09;【前端学 java】java的基础语法&#xff08;1&#xff09;【前端学java】JAVA中的packge与import&#xff08;2&#xff09;【前端学java】面向对象编程基础-类的使用 &#xff08…

Vue 3.0 中重置 reactive 定义的响应式对象数据,恢复为初始值

Vue 3.0 中如何重置 reactive 定义的数据&#xff0c;恢复为初始值&#xff1f; - 知乎 1、直接挨个重置数据&#xff08;不适用对象中有多个属性&#xff0c;比较繁琐&#xff09; import { reactive } from vueconst state reactive({count: 0,name: John })// 重置数据&a…

算法笔记-第十章-图的遍历(未处理完-11.22日)

算法笔记-第十章-图的遍历 图遍历的知识点一关于深度和广度优先遍历的基础知识 &#xff1a;大佬讲解一大佬讲解二 图遍历知识二连通分量实现DFS的模板思路邻接矩阵版本邻接表版本 无向图的连通块 图遍历的知识点一 关于深度和广度优先遍历的基础知识 &#xff1a; 大佬讲解 …