HDFS的java客户端编写

来源:互联网 发布:药品网络销售总总结 编辑:程序博客网 时间:2024/05/16 06:55
package it.cast.hdfs;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.net.URI;import org.apache.commons.io.IOUtils;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FSDataInputStream;import org.apache.hadoop.fs.FSDataOutputStream;import org.apache.hadoop.fs.FileStatus;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.junit.Before;import org.junit.Test;import com.sun.org.apache.xalan.internal.xsltc.compiler.sym;public class HdfsUtil {FileSystem fs=null;@Beforepublic void init() throws Exception{//读取classpath下的xxx-site.xml配置文件,并解析其内容,封装到conf对象中Configuration conf=new Configuration();//也可以在代码中对conf中的配置信息进行手动设置,会覆盖掉配置文件中读取的值conf.set("fs.defaultFS", "hdfs://weekend110:9000/");//根据配置信息,去获取一个具体文件系统的客户端操作实例fs=FileSystem.get(new URI("hdfs://weekend110:9000/"),conf,"hadoop");}/** * 上传文件 * @throws IOException  */@Testpublic void upload() throws IOException{Path dst=new Path("hdfs://weekend110:9000//aa/qingshu.txt");FSDataOutputStream os=fs.create(dst);FileInputStream is=new FileInputStream("c:/qingshu.txt");IOUtils.copy(is, os);}@Testpublic void upload2() throws IllegalArgumentException, IOException{fs.copyFromLocalFile(new Path("c:/qingshu.txt"), new Path("hdfs://weekend110:9000/aa/qingshu2.txt"));}/** * 下载文件 * @throws IOException  * @throws IllegalArgumentException  */public void download() throws IllegalArgumentException, IOException{fs.copyToLocalFile(new Path("hdfs://weekend110:9000/aa/qingshu2.txt"),new Path("c:/qingshu2.txt"));}/** * 查看文件信息 * @throws IOException  * @throws IllegalArgumentException  * @throws FileNotFoundException  */@Testpublic void listFiles() throws FileNotFoundException, IllegalArgumentException, IOException{     //ListFiles 列出的是文件信息,而且提供递归遍历RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/"), true);    while(listFiles.hasNext()){    LocatedFileStatus file = listFiles.next();    Path path = file.getPath();    String name = path.getName();    System.out.println(name);    }    System.out.println("-------------------");    //可以列出文件和文件夹的信息,但是不提供自带的递归遍历    FileStatus[] listStatus = fs.listStatus(new Path("/"));    for(FileStatus status:listStatus){    String name=status.getPath().getName();    System.out.println(name + (status.isDirectory()?"is dir":"is file"));    }    }/** * 创建文件夹 * @throws IOException  * @throws IllegalArgumentException  */@Testpublic void mkdir() throws IllegalArgumentException, IOException{boolean mkdirs = fs.mkdirs(new Path("/aaa/bbb/ccc"));}/** * 删除文件或文件夹 * @throws Exception  * @throws IllegalArgumentException  */public void rm() throws IllegalArgumentException, Exception{fs.delete(new Path("/aa"),true);}}

原创粉丝点击