hadoop hdfs的java操作

访问hdfs上的文件并写出到输出台

   /**
     * 访问hdfs上的文件并写出到输出台
     * @param args
     */
    public static void main(String[] args) {
        try {
            //将hdfs格式的url转换成系统能够识别的
            URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
            URL url = new URL("hdfs://hadoop1:9000/hello");
            InputStream in = url.openStream();
            /**
             * 将读取到的数据写入到文件,不需要自己控制缓冲区,也不需要自己去读取输入流
             * @param in 输入流
             * @param out 输出流
             * @param bufferSize 换成区大小 
             * @param close 是否关闭流,如果是false,需要在finally中关闭
             *           IOUtils.closeStream(in);
             */
            IOUtils.copyBytes(in, System.out, 1024, true);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

获取FileSystem

   /**
     * 获取FileSystem
     * 使用Hadoop的fileSystem读取文件
     */
    public static FileSystem getFileSystem() throws IOException,
            URISyntaxException {
        FileSystem fileSystem = FileSystem.get(new URI("hdfs://hadoop1:9000"), new Configuration());
        return fileSystem;
    }

创建文件夹

   /**
     * 创建文件夹
     * @throws URISyntaxException 
     */
    public static void mkdir() throws IOException, URISyntaxException {
        FileSystem fileSystem = getFileSystem();
        //在hdfs上创建文件夹,并返回创建是否成功的标示
        boolean successful = fileSystem.mkdirs(new Path("/dir1"));
        if(successful){
            System.out.println("创建文件夹成功");
        }
    }

上传

   /**
     * 上传
     * @throws URISyntaxException 
     */
    public static void putdata() throws IOException,
            FileNotFoundException, URISyntaxException {
        FileSystem fileSystem = getFileSystem();
        //创建一个上传路径,返回输出流
        FSDataOutputStream os = fileSystem.create(new Path("/dir1/readme"));
        FileInputStream in = new FileInputStream("D:\\Program Files\\others\\2345Soft\\HaoZip\\2345好压免责声明.txt");
        IOUtils.copyBytes(in, os, 1024, true);
    }

下载

   /**
     * 下载
     * @throws URISyntaxException 
     */
    public static void download() throws IOException, URISyntaxException {
        FileSystem fileSystem = getFileSystem();
        FSDataInputStream in = fileSystem.open(new Path("hdfs://hadoop1:9000/hello"));
        //关闭流需要手动关闭,System.out也是一个输出流,如果是true 下面就不会输出了
        IOUtils.copyBytes(in, System.out, 1024, false);
        in.close();
    }

删除文件或文件夹

   /**删除文件或文件夹
     * true:表示是否递归删除,如果是文件,这里是true,false都是无所谓,
     *         文件夹必须是true,否则报错
     * @throws URISyntaxException 
     */
    public static void delete() throws IOException, URISyntaxException {
        FileSystem fileSystem = getFileSystem();
        boolean isDeleted = fileSystem.delete(new Path("/dir1"), true);
        if(isDeleted){
            System.out.println("删除成功");
        }
    }

遍历目录

    /**遍历目录
     * 调用FileSystem的listStatus方法
     * 查看file的状态 使用FileStatus
     * @throws URISyntaxException 
     */
    public static void list() throws IOException, URISyntaxException {
        FileSystem fileSystem = getFileSystem();
        FileStatus[] listStatus = fileSystem.listStatus(new Path("/"));
        for (FileStatus fileStatus : listStatus) {
            String isDir = fileStatus.isDir()?"目录":"文件";
            String name = fileStatus.getPath().getName().toString();
            System.out.println(isDir+"-->"+name);
        }
    }

 

posted @ 2015-04-04 08:49  小丁子  阅读(382)  评论(0编辑  收藏  举报