HDFS【Java API操作】

package com.atguigu.java;
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;
import java.io.IOException;
import java.net.URI;

/**
 * 1.创建对象
 * 2.操作对应的流程
 * 3.关资源
 */
public class HDFSTest {
    FileSystem fs;
    Configuration conf;

    /**
     * 1.创建文件系统的对象
     *
     * 2.配置文件的顺序(最大的就是最后生效的)
     *      conf > 工程下的xxx-site.xml > 集群中xxx-site.xml > 集群中xxx-default.xml
     */
    @Before //在执行任意一个单元测试前执行该方法
    public void createObject() throws IOException, InterruptedException {
        //1.获取文件系统对象
        conf = new Configuration();
        //配置副本数 - 该配置只针对本次的操作有效。
//        conf.set("dfs.replication","1");
        /*
        final URI uri : hdfs的集群操作路径 - hdfs://hadoop102:9820
        final Configuration conf : 配置文件的对象
        final String user : 操作集群的用户
         */
        fs = FileSystem.get(URI.create("hdfs://hadoop102:9820"), conf, "atguigu");
    }


    @After //在执行完任意一个单元测试后再执行该方法
    public void colse(){
        //3.关资源
        if (fs != null) {
            try {
                fs.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }


    /**
     *  上传
     * @throws IOException
     * @throws InterruptedException
     */
    @Test
    public void upload() throws IOException, InterruptedException {
        //2.具体的操作
        /**
         * boolean delSrc--是否删除源文件
         * boolean overwrite --如果目标地址如果已经存在和上传对象一样名字的文件是否覆盖
         *                   --如果为true,那么就覆盖。如果为false但名字又相同那么就抛异常
         * Path src--源文件
         * Path dst--目标地址
         */
        fs.copyFromLocalFile(false,false,
                new Path("D:\\testfile\\zhixingheyi.txt"),new Path("/"));
    }
}

相关推荐