我是靠谱客的博主 拉长眼睛,最近开发中收集的这篇文章主要介绍Hadoop FileSystem API 管理文件,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Hadoop Java API–FileSystem类的方法,可以在这个官网查看http://hadoop.apache.org/docs/current/api/
在这里插入图片描述在这里插入图片描述1.连接HDFS的代码,查看user/root的文件
conf.set(“fs.defaultFS”, “hdfs://192.168.100.101:8020”)
中的"fs.defaultFS", “hdfs://192.168.100.101:8020” 可以查看hadoop/etc/hadoop中的core-site.xml
在这里插入图片描述

package demo;
/************************************************************    
 1 创建目录mkdir("/idea/");
 2.创建文件create("/idea/haha.txt");
 3.查看hdfs文件内容read("/idea/text.txt");
 4文件重命名moveFile("/idea/haha.txt","/idea/hello.txt");
 5.上传文件putFile("G://text.txt","/idea/");
 6.下载文件getFile("/idea/abc.txt","G://");
 7.查询目录下的所有文件listStatus("/idea/");
 8.删除文件deleteFile("/idea/hello.txt");
  History: 
   // 历史修改记录 
 <author>  <time>   <version >   <desc>       
 Light    18/7/16     1.0     build this moudle   
 ***********************************************************/
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.*;

public class JavaApi2 {
    Configuration conf;
	FileSystem filesystem;
	@Before
    public void before() throws  InterruptedException, URISyntaxException, IOException  {
        conf=new Configuration();
        filesystem=FileSystem.get(new URI("hdfs://192.168.100.101:8020"), conf, "root");

    }

    /**
     * junit测试函数
     * @throws IOException
     */
    @Test
    public void Text() throws IOException {
        //创建目录
        //mkdir("/idea/");

        //创建文件
        //create("/idea/haha.txt");

        //查看hdfs文件内容
        //read("/idea/text.txt");

        //文件重命名
        //moveFile("/idea/haha.txt","/idea/hello.txt");

        //上传文件
        //putFile("G://text.txt","/idea/");

        //下载文件
        //getFile("/idea/abc.txt","G://");

        //查询目录下的所有文件
        //listStatus("/idea/");

        //删除文件
        //deleteFile("/idea/hello.txt");
    }

    /**
     * 创建目录
     * @param path 创建目录的地址(例:/hadoop/)
     * @throws IOException
     */
    public void mkdir(String path) throws IOException {
        //创建hdfs目录
        if(filesystem.exists(new Path("/user/root/data")))
        {
            System.out.println("目录已存在");
        }
        else
        {
            boolean result=filesystem.mkdirs(new Path("/user/root/data"));
            System.out.println(result);
        }

    }

    /**
     * 创建文件
     * @param path hdfs文件地址(例:/hadoop/abc.txt)
     * @throws IOException
     */
    public  void create(String path) throws IOException{
        //创建文件
        if(filesystem.exists(new Path(path)))
        {
            System.out.println("文件已存在");
        }
        else
        {
            FSDataOutputStream outputStream=  filesystem.create(new Path(path));
            System.out.println("文件创建成功");
        }
    }

    /**
     * 查看文件内容
     * @param dst hdfs文件地址(例:/hadoop/abc.txt)
     * @throws IOException
     */
    public void read(String dst) throws IOException {
        if(filesystem.exists(new Path(dst)))
        {
            FSDataInputStream inputstream=filesystem.open(new Path(dst));
            InputStreamReader isr=new InputStreamReader(inputstream);
            BufferedReader br=new BufferedReader(isr);
            String str=br.readLine();
            while(str!=null){
                System.out.println(str);
                str=br.readLine();
            }
            br.close();
            isr.close();
            inputstream.close();
        }
       else
        {
            System.out.println("文件不存在");
        }
    }

    /**
     * 将dst1重命名为dst2,也可以进行文件的移动
     * @param oldpath 旧名
     * @param newpath 新名
     */
    public void moveFile(String oldpath, String newpath) {
        Path path1 = new Path(oldpath);
        Path path2 = new Path(newpath);
        try {
            if (!filesystem.exists(path1)) {
                System.out.println(oldpath + " 文件不存在!");
                return;
            }
            if (filesystem.exists(path2)) {
                System.out.println(newpath + "已存在!");
                return;
            }
            // 将文件进行重命名,可以起到移动文件的作用
            filesystem.rename(path1, path2);
            System.out.println("文件已重命名!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 上传文件到hdfs
     * @param local
     * @param dst
     */
    public void putFile(String local, String dst) {
        try {
            // 从本地将文件拷贝到HDFS中,如果目标文件已存在则进行覆盖
            filesystem.copyFromLocalFile(new Path(local), new Path(dst));
            System.out.println("上传成功!");
            // 关闭连接
        } catch (IOException e) {
            System.out.println("上传失败!");
            e.printStackTrace();
        }
    }

    /**
     * 下载文件到本地
     * @param dst
     * @param local
     */
    public void getFile(String dst, String local) {
        try {
            if (!filesystem.exists(new Path(dst))) {
                System.out.println("文件不存在!");
            } else {
                filesystem.copyToLocalFile(new Path(dst), new Path(local));
                System.out.println("下载成功!");
            }
        } catch (IOException e) {
            System.out.println("下载失败!");
            e.printStackTrace();
        }
    }


    /**
     * 显示目录下所有文件
     * @param dst
     */
    public void listStatus(String dst) {
        try {
            if (!filesystem.exists(new Path(dst))) {
                System.out.println("目录不存在!");
                return;
            }
            // 得到文件的状态
            FileStatus[] status = filesystem.listStatus(new Path(dst));
            for (FileStatus s : status) {
                System.out.println(s.getPath().getName());
            }

        } catch (IllegalArgumentException | IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    /**
     * 删除hdfs中的文件
     * @param dst
     */
    public void deleteFile(String dst) {
        try {
            if (!filesystem.exists(new Path(dst))) {
                System.out.println("文件不存在!");
            } else {
                filesystem.delete(new Path(dst), true);
                System.out.println("删除成功!");
            }
        } catch (IOException e) {
            System.out.println("删除失败!");
            e.printStackTrace();
        }
    }


    /**
     * 关闭filesyatem
     */
    @After
    public void destory()
    {
        try {
            filesystem.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

来源:https://www.cnblogs.com/suifengye/p/9319386.html

经过自己操作,并运行成功

package com.pyp.Hdfs;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URISyntaxException;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.*;
import org.junit.*;


public class HDFSClient {
	Configuration conf;
	FileSystem filesystem;
	@Before
    public void before() throws  InterruptedException, URISyntaxException, IOException  {
        conf=new Configuration();
       
        filesystem=FileSystem.get(new URI("hdfs://192.168.100.101:8020"), conf, "root");

    }
    /**
     * junit测试函数
     * @throws IOException
     */
	 @Test
	    public void Text() throws IOException {
	        //创建目录


	        //创建文件

	        //查看hdfs文件内容
		 
	        //文件重命名

	        //上传文件

	        //下载文件

	        //查询目录下的所有文件

	        //删除文件
	    }

	
	/**
	 
     * 创建目录
     * @param path 创建目录的地址(例:/user/hadoop/
	 
     */
	 @Test
	public void mkdir() throws Exception, IOException {
		//创建hdfs 目录
		if(filesystem.exists(new Path("/user/hadoop")))
		{
			System.out.println("目录已存在");
		}
		else {
			boolean result=filesystem.mkdirs(new Path("/user/hadoop"));
			System.out.println(result);
			System.err.println("目录创建成功");
		}
	}
	/**
     * 创建文件
     * @param path hdfs文件地址(例:/hadoop/abc.txt)
     */
	@Test
	public void create() throws IllegalArgumentException, IOException {
		//创建文件
        if(filesystem.exists(new Path("/user/hadoop/abc.txt")))
        {
            System.out.println("文件已存在");
        }
        else
        {
            FSDataOutputStream outputStream=  filesystem.create(new Path("/user/hadoop/abc.txt"));
            System.out.println("文件创建成功");
        }
    }

	/**
     * 查看文件内容
     * @param dst hdfs文件地址(例:/hadoop/abc.txt)
     */
	@Test
	public void read() throws Exception, IOException {
		if(filesystem.exists(new Path("/user/hadoop/abc.txt"))) {
			FSDataInputStream input=filesystem.open(new Path("/user/hadoop/data.txt"));
			InputStreamReader isr=new InputStreamReader(input);
			BufferedReader br=new BufferedReader(isr);
			String str=br.readLine();
			while(str!=null) {
				System.out.println(str);
				str=br.readLine();
			}
			br.close();
			isr.close();
			input.close();
		}
		else {
			System.out.println("文件不存在");
		}
	}
	/**
     * 将dst1重命名为dst2,也可以进行文件的移动
     * @param path1 旧名
     * @param path2 新名
     */
	@Test
	public void moveFile() {
		Path path1=new Path("/user/hadoop/abc.txt");
		Path path2=new Path("/user/hadoop/cba.txt");
			try {
				if(!filesystem.exists(path1)) {
					System.out.println(path1+"文件不存在");
					return;
					}
				if(filesystem.exists(path2)) {
					System.out.println(path2 + "已存在!");
	                return;
				}
				//将文件进行重命名,可以起到移动文件的作用
				filesystem.rename(path1, path2);
				System.out.println("文件已重命名");
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	}
    
    /**
     * 上传文件到hdfs
     * F://hadoop_work/hdfs/test.txt  自己电脑(不是虚拟机)
     * /user/hadoop hdfs
     */
	@Test
    public void putFile() {
        try {
            // 从本地将文件拷贝到HDFS中,如果目标文件已存在则进行覆盖
            filesystem.copyFromLocalFile(new Path("F://hadoop_work/hdfs/test.txt"), new Path("/user/hadoop"));
            System.out.println("上传成功!");
            // 关闭连接
        } catch (IOException e) {
            System.out.println("上传失败!");
            e.printStackTrace();
        }
    }

    /**
     * 下载文件到本地
     * F://hadoop_work/hdfs/test1.txt  自己电脑(不是虚拟机)
     * /user/hadoop/test.txt hdfs
     */
	@Test
    public void getFile() {
        try {
            if (!filesystem.exists(new Path("/user/hadoop/test.txt"))) {
                System.out.println("文件不存在!");
            } else {
                filesystem.copyToLocalFile(new Path("/user/hadoop/test.txt"), new Path("F://hadoop_work/hdfs/test1.txt"));
                System.out.println("下载成功!");
            }
        } catch (IOException e) {
            System.out.println("下载失败!");
            e.printStackTrace();
        }
    }
    /**
     * 显示目录下所有文件
     */
	@Test
    public void listStatus() {
        try {
            if (!filesystem.exists(new Path("/user/hadoop"))) {
                System.out.println("目录不存在!");
                return;
            }
            // 得到文件的状态
            FileStatus[] status = filesystem.listStatus(new Path("/user/hadoop"));
            for (FileStatus s : status) {
            	// 输出详情
        		// 文件名称
        		System.out.println(s.getPath().getName());
        		// 长度
        		System.out.println(s.getLen());
        		// 权限
        		System.out.println(s.getPermission());
        		// 分组
        		System.out.println(s.getGroup());
        		
            }

        } catch (IllegalArgumentException | IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    /**
     * 删除hdfs中的文件
     */
	@Test
    public void deleteFile() {
        try {
            if (!filesystem.exists(new Path("/usr/hadoop/cba.txt"))) {
                System.out.println("文件不存在!");
            } else {
                filesystem.delete(new Path("/usr/hadoop/cba.txt"), true);
                System.out.println("删除成功!");
            }
        } catch (IOException e) {
            System.out.println("删除失败!");
            e.printStackTrace();
        }
    }


    /**
     * 关闭filesyatem
     */
    @After
    public void destory()
    {
        try {
            filesystem.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

最后

以上就是拉长眼睛为你收集整理的Hadoop FileSystem API 管理文件的全部内容,希望文章能够帮你解决Hadoop FileSystem API 管理文件所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(31)

评论列表共有 0 条评论

立即
投稿
返回
顶部