package cn.test.hdfs;
 
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
 
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.FileUtil;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
 
public class OperateHdfs {
    
     //读取hdfs上的文件内容
     public static void ReadFromHDFS(String file) throws IOException 
    { 
        Configuration conf = new Configuration(); 
        FileSystem fs = FileSystem.get(URI.create(file), conf); 
        Path path = new Path(file); 
        FSDataInputStream in = fs.open(path); 
         
        IOUtils.copyBytes(in, System.out, 4096, true); 
        //使用FSDataInoutStream的read方法会将文件内容读取到字节流中并返回 
        /**
         * FileStatus stat = fs.getFileStatus(path);
      // create the buffer
       byte[] buffer = new byte[Integer.parseInt(String.valueOf(stat.getLen()))];
       is.readFully(0, buffer);
       is.close();
             fs.close();
       return buffer;
         */ 
    }
    
     //在指定位置新建一个文件,并写入字符 
    public static void WriteToHDFS(String file, String words) throws IOException, URISyntaxException 
    { 
        Configuration conf = new Configuration(); 
        FileSystem fs = FileSystem.get(URI.create(file), conf); 
        Path path = new Path(file); 
        FSDataOutputStream out = fs.create(path);   //创建文件
       
        //两个方法都用于文件写入,好像一般多使用后者 
        //out.writeBytes(words);   
        out.write(words.getBytes("UTF-8")); 
         
        out.close(); 
        //如果是要从输入流中写入,或是从一个文件写到另一个文件(此时用输入流打开已有内容的文件) 
        //可以使用如下IOUtils.copyBytes方法。 
        //FSDataInputStream in = fs.open(new Path(args[0])); 
        //IOUtils.copyBytes(in, out, 4096, true)        //4096为一次复制块大小,true表示复制完成后关闭流 
    }
    
    //删除hdfs上的文件
    public static void DeleteHDFSFile(String file) throws IOException 
    { 
        Configuration conf = new Configuration(); 
        FileSystem fs = FileSystem.get(URI.create(file), conf); 
        Path path = new Path(file); 
        //查看fs的delete API可以看到三个方法。deleteonExit实在退出JVM时删除,下面的方法是在指定为目录是递归删除 
        fs.delete(path,true); 
        fs.close(); 
    }
   
    //上传本地文件到hdfs
    public static void UploadLocalFileHDFS(String src, String dst) throws IOException 
    { 
        Configuration conf = new Configuration(); 
        FileSystem fs = FileSystem.get(URI.create(dst), conf); 
        Path pathDst = new Path(dst); 
        Path pathSrc = new Path(src); 
         
        fs.copyFromLocalFile(pathSrc, pathDst); 
        fs.close(); 
    }
   
    //显示目录下所有文件
    public static void ListDirAll(String DirFile) throws IOException 
    { 
        Configuration conf = new Configuration(); 
        FileSystem fs = FileSystem.get(URI.create(DirFile), conf); 
        Path path = new Path(DirFile); 
         
        FileStatus[] status = fs.listStatus(path); 
        //方法1   
        for(FileStatus f: status) 
        { 
            System.out.println(f.getPath().toString());   
        } 
        //方法2   
        Path[] listedPaths = FileUtil.stat2Paths(status);   
        for (Path p : listedPaths){  
          System.out.println(p.toString()); 
        } 
    }
   
     public static void main(String[] args) throws IOException, URISyntaxException {
          String file = "hdfs://192.168.13.20:9000/user/hadoop/test.txt";
         
          String localFile = "C:/Users/lenovo/Desktop/test.txt";
         
          //String words = "This words is to write into file!\n";
          String words = "测试向HDFS里面写文件!";
         
        WriteToHDFS(file, words);
          //ReadFromHDFS(file);
          //DeleteHDFSFile(file);
         
          //UploadLocalFileHDFS(localFile, file);
         
          String path = "hdfs://192.168.13.20:9000/user/hadoop/";
          ListDirAll(path);
     }
}

java读写HDFS的更多相关文章

  1. Java读写hdfs上的avro文件

    1.通过Java往hdfs写avro文件 import java.io.File; import java.io.IOException; import java.io.OutputStream; i ...

  2. Java读写HDFS文件

    一.依赖包maven路径 <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client --> <d ...

  3. HDFS文件系统基本文件命令、编程读写HDFS

    基本文件命令: 格式为:hadoop fs -cmd <args> cmd的命名通常与unix对应的命令名相同.例如,文件列表命令: hadoop fs -ls 1.添加目录和文件 HDF ...

  4. Spark学习笔记——读写HDFS

    使用Spark读写HDFS中的parquet文件 文件夹中的parquet文件 build.sbt文件 name := "spark-hbase" version := " ...

  5. 马士兵hadoop第三课:java开发hdfs

    马士兵hadoop第一课:虚拟机搭建和安装hadoop及启动 马士兵hadoop第二课:hdfs集群集中管理和hadoop文件操作 马士兵hadoop第三课:java开发hdfs 马士兵hadoop第 ...

  6. hadoop集群配置和在windows系统上运用java操作hdfs

    安装 配置 概念 hadoop常用shell命令 使用java操作hadoop 本文介绍hadoop集群配置和在windows系统上运用java操作hdfs 安装 http://mirror.bit. ...

  7. 马士兵hadoop第三课:java开发hdfs(转)

    马士兵hadoop第一课:虚拟机搭建和安装hadoop及启动 马士兵hadoop第二课:hdfs集群集中管理和hadoop文件操作 马士兵hadoop第三课:java开发hdfs 马士兵hadoop第 ...

  8. Java读写文本文件操作

    package com.test; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; ...

  9. java 读写word java 动态写入 模板文件

    import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import ja ...

随机推荐

  1. SiP封装成超越摩尔定律的要塞,日月光/安靠/长电科技谁将赢取IC封装的未来

    来源:EEFOCUS 进入2017年,摩尔定律的脚步愈加沉重,"摩尔定律已死"的言论笼罩着整个半导体行业,超越摩尔定律发展的想法在半导体从业人员的脑海里更清晰了.在这样的大环境下, ...

  2. Linux ->> Chmod命令改变文件/文件夹属性

    简介 chmod命令用于改变linux系统文件或目录的访问权限,控制用户/用户组对文件或目录的访问权限. 用法: 两种用法:1)用字母r(读).w(写).x(执行)表示权限类型:2)用数字表示,4代表 ...

  3. Thrift学习笔记—IDL基本类型

    thrift 采用IDL(Interface Definition Language)来定义通用的服务接口,并通过生成不同的语言代理实现来达到跨语言.平台的功能.在thrift的IDL中可以定义以下一 ...

  4. 在IIS7上导出所有应用程序池的方法 批量域名绑定

    在IIS7+上导出所有应用程序池的方法:%windir%/system32/inetsrv/appcmd list apppool /config /xml > c:/apppools.xml  ...

  5. DQN核心思想理解

    看过Deep learning(convolutional neural network),看过RL(Q-learning).但是在两者结合这一块一直弄不明白. 我的疑问在于一直不明白DL是怎样识别出 ...

  6. Windows+linux命令大集合

    net use \\ip\ipc$ " " /user:" " 建立IPC空链接 net use \\ip\ipc$ "密码" /user: ...

  7. 转 C++11之std::function和std::bind

    std::function是可调用对象的包装器,它最重要的功能是实现延时调用: #include "stdafx.h" #include<iostream>// std ...

  8. (转)浅谈PostgreSQL的索引

    1. 索引的特性 1.1 加快条件的检索的特性 当表数据量越来越大时查询速度会下降,在表的条件字段上使用索引,快速定位到可能满足条件的记录,不需要遍历所有记录. create table t(id i ...

  9. BIND简易教程(2):BIND视图配置

    目录:BIND简易教程(1):安装及基本配置BIND简易教程(2):BIND视图配置(本篇)BIND简易教程(3):DNSSec配置 上文书说到,我们把aaa.apple.tree解析到192.168 ...

  10. 【我所认知的BIOS】—> uEFI AHCI Driver(8) — Pci.Read()

    [我所认知的BIOS]-> uEFI AHCI Driver(8) - Pci.Read() LightSeed 6/19/2014 社会一直在变.不晓得是不是社会变的太苦开,而我没变所以我反而 ...