java读写hdfs文件操作_HDFS文件系统简单的Java读写操作

packagecom.cn.hadoop.hdfs;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.net.URI;importjava.net.URISyntaxException;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.FSDataInputStream;importorg.apache.hadoop.fs.FSDataOutputStream;importorg.apache.hadoop.fs.FileSystem;importorg.apache.hadoop.fs.Path;importorg.apache.hadoop.io.IOUtils;importorg.junit.Before;importorg.junit.Test;public classHdfsApi {//定义一个fileSystem的变量,用的是Hadoop的包

FileSystem fileSystem = null;//添加一个注解

@Beforepublic void getfileSystem() throwsIOException, InterruptedException, URISyntaxException{//获取一个具体的文件系统对象

fileSystem =FileSystem.get(//创建一下HDFS文件系统的访问路径,就是Hadoop配置文件中的core-sit.xml中的HDFS文件系统的所在机器

new URI("hdfs://linux.centos.one:8020"),//创建一个Hadoop的配置文件的类

newConfiguration(),//就是Linux启动的用户名

"hadoop");

}/*** 从HDFS文件系统下载文件

* 首先编写一个输入流,将内容输入到本地文件缓存。

* 然后编写一个输出流,将内容输出到本地磁盘。*/

/***@throwsIOException

*@throwsIllegalArgumentException*/@Testpublic void testDownload() throwsIllegalArgumentException, IOException{//构建一个输入流,将需要下载的文件写入到客户端的内存中

FSDataInputStream in = fileSystem.open(new Path("/user/beifeng/mapreduce/wordcount/input/wc.input"));//构建一个输出流,将需要下载的文件从内存中写入到本地磁盘

FileOutputStream out = new FileOutputStream("D://11111111111111111111111111111111111111.txt");/*** 参数说明:

* in

* 代表输入流,读取HDFS文件系统的文件到本机内存中

* out

* 代表输出流,将本机内存中的文件写入到本地磁盘中

* 4096

* 缓冲区大小

* true

* 自动关闭流,如果不使用自动关闭的话需要手动关闭输入输出流

*

* 手动关闭输入输出流:

* IOUtils.closeStream(in);

* IOUtils.closeStream(out);*/IOUtils.copyBytes(in, out,4096, true);

}/*** 上传文件到HDFS文件系统

*@throwsIOException

*@throwsIllegalArgumentException*/@Testpublic void testUpload() throwsIllegalArgumentException, IOException{//构建一个输入流,将本机需要上传的文件写入到内存中

FileInputStream in = new FileInputStream("D:\\settings.xml");//构建一个输出流,将客户端内存的数据写入到HDFS文件系统指定的路径中

FSDataOutputStream out = fileSystem.create(new Path("/input/sting.xml"), true);/** 参数说明:

* in

* 代表输入流,读取HDFS文件系统的文件到本机内存中

* out

* 代表输出流,将本机内存中的文件写入到本地磁盘中

* 4096

* 缓冲区大小

* true

* 自动关闭流,如果不使用自动关闭的话需要手动关闭输入输出流

*

* 手动关闭输入输出流:

* IOUtils.closeStream(in);

* IOUtils.closeStream(out);*/IOUtils.copyBytes(in, out,4096, true);

}/*** 测试创建一个目录

* bin/hdsf dfs -mkdir [-p] /dir

*@throwsIOException

*@throwsIllegalArgumentException*/@Testpublic void testMakeDir() throwsIllegalArgumentException, IOException{boolean isSuccess = fileSystem.mkdirs(new Path("/testMK"));

System.out.println(isSuccess);

}/*** 测试删除目录/文件:

*@throwsIOException

*@throwsIllegalArgumentException

**/@Testpublic void testDel() throwsIllegalArgumentException, IOException{

System.out.println(//返回的是一个boolean类型的值

fileSystem.delete(//指定要删除的目录

new Path("/testMK"),//是否使用递归删除

true));

}

}

你可能感兴趣的:(java读写hdfs文件操作)