zoukankan      html  css  js  c++  java
  • HDFS java api文件基本操作 CDH-5-11-2

    HDFS java api 文件基本操作

    package hdfs;
    
    import java.io.BufferedReader;
    import java.io.ByteArrayInputStream;
    import java.io.File;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.URI;
    import java.util.Scanner;
    
    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.Path;
    import org.apache.hadoop.io.IOUtils;
    
    public class HdfsOperation {
    
        public static final String BASE_URL = "hdfs://hadoop-master.wei.com:9000";
        public static Configuration conf;
        public static FileSystem fs;
    
        //静态代码块创建fs文件系统对象
        static {
            conf = new Configuration();
            try {
                fs = FileSystem.get(URI.create(BASE_URL), conf);
            } catch (IOException e) {
                System.out.println("initialize filesystem error");
                e.printStackTrace();
            }
        }
    
        /*** 查看文件内容 ***/
        public static void cat(String filePath) {
            Path path = new Path(filePath);
            FSDataInputStream inputStream = null;
            try {
                inputStream = fs.open(path);
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
    
                IOUtils.copyBytes(inputStream, System.out, 4096, false);
            } catch (IOException e) {
    
                e.printStackTrace();
            } finally {
                IOUtils.closeStream(inputStream);
            }
    
        }
    
        /*** 上传文件到hdfs ***/
        public static boolean put(boolean delSrcFile, boolean overwrite, String srcStr, String dstStr) throws IOException {
            Path srcPath = new Path(srcStr);
            Path dstPath = new Path(dstStr);
    
            // 判断源文件是否存在
            if (!(new File(srcStr)).exists()) {
                System.out.println("上传的源文件不存在!");
                return false;
            }
    
            // 判断上传目录是否存在
            if (!fs.exists(dstPath)) {
                System.out.println("上传路径不存在!");
                return false;
            }
    
            fs.copyFromLocalFile(delSrcFile, overwrite, srcPath, dstPath);
    
            System.out.println("上传到 :" + conf.get("fs.defaultFS.name") + dstStr);
            // 列出该目录下的文件
            System.out.println("-------list-----------");
            FileStatus[] listStatus = fs.listStatus(dstPath);
    
            for (FileStatus file : listStatus) {
                System.out.println(file.getPath());
            }
            return true;
    
        }
    
        /*** 从hdfs下载文件 ***/
        public static boolean get(boolean delSrc, String srcStr, String dstStr, boolean useRawLocalFileSystem)
                throws IOException {
            Path srcPath = new Path(srcStr);
            Path dstPath = new Path(dstStr);
    
            // 判断源文件是否存在
            if (!fs.exists(srcPath)) {
                System.out.println("源文件不存在");
                return false;
            }
    
            // 判断目标路径是否存在,不存则创建
            else if (!new File(dstStr).exists()) {
                new File(dstStr).mkdirs();
                System.out.println();
            } else {
                String fileName = srcPath.getName();
                // 判断同名文件是否存在
                if (new File(dstStr + "\" + fileName).exists()) {
                    System.out.println("本地文件已存在!");
                    return false;
                } else {
                    // 下载文件
                    fs.copyToLocalFile(delSrc, srcPath, dstPath, useRawLocalFileSystem);
                    System.out.println("download successful! At:" + dstStr);
                    return true;
    
                }
            }
            return true;
        }
    
        /*** 删除文件 ***/
        public static boolean rmFile(String filePath) throws IOException {
    
            Path path = new Path(filePath);
            boolean deleteOnExit = fs.deleteOnExit(path);
            if (deleteOnExit) {
                System.out.println("删除成功");
                return deleteOnExit;
            } else {
                System.out.println("删除失败,文件不存在");
                return deleteOnExit;
            }
    
        }
    
        /*** 文件重命名 ***/
        public static boolean renameFile(String oldName, String newName) throws IOException {
            Path srcPath = new Path(oldName);
            Path newPath = new Path(newName);
            boolean isSuccess = fs.rename(srcPath, newPath);
            if (isSuccess) {
                System.out.println("重命名: " + oldName + " 为  " + newName);
            } else {
                System.out.println("重命名失败!");
            }
            return isSuccess;
        }
    
        /*** 创建文件,并且写入内容 ***/
        public static boolean touch(String filePath, String content) throws IOException {
            Path path = new Path(filePath);
            byte[] contens = content.getBytes();
    
            boolean overwrite;
            if (fs.exists(path)) {
                // 文件已经存在
                while (true) {
                    System.out.println("文件已经存在,是否覆盖(y/n)?");
                    Scanner sc = new Scanner(System.in);
                    String input = sc.next();
                    if ("y".equals(input.trim()) || "Y".equals(input.trim())) {
                        FSDataOutputStream out = fs.create(path, true);
                        out.write(contens);
                        out.close();
                        System.out.println("文件创建成功!");
                        return true;
    
                    } else if ("n".equals(input) || "N".equals(input)) {
                        System.out.println("文件写入失败,文件已存在");
                        return false;
                    } else {
                        continue;
                    }
                }
    
            } else {
                // 文件不存在
                FSDataOutputStream out = fs.create(path);
                out.write(contens);
                out.close();
                System.out.println("文件创建成功!");
                return true;
            }
    
        }
    
        /*** 创建文件夹 ***/
        public static boolean mkdir(String dirPath) throws IOException {
            Path path = new Path(dirPath);
            boolean exists = fs.exists(path);
            if (exists) {
                System.out.println("目录已存在");
                return false;
            } else {
                if (fs.mkdirs(path)) {
                    System.out.println("目录创建成功: " + dirPath);
                    return true;
                }
                return false;
            }
        }
    
        /** 列出路径下的目录 **/
        public static void ls(String path) throws IOException {
            Path p = new Path(path);
            if (!fs.exists(p)) {
                System.out.println("路径:" + path + " 不存在!");
            } else {
                FileStatus[] listStatus = fs.listStatus(p);
                System.out.println("under path:" + path);
                for (FileStatus f : listStatus) {
                    System.out.println(f.getPath());
                }
            }
    
        }
    
        /** 添加内容到文件 **/
        public static void append(String content, String filePath) throws IOException {
            Path path = new Path(filePath);
            // 将字符串转为输入流
            ByteArrayInputStream in = new ByteArrayInputStream(content.getBytes());
            // 获得添加 输出流
            FSDataOutputStream out = fs.append(path, 4096);
            IOUtils.copyBytes(in, out, 4096, true);
    
        }
    
    }
    
  • 相关阅读:
    关于10053 trace中的UNCOMPBKTS和ENDPTVALS
    12c新特性
    ORA600:[ksnpost:ksnigb]错误一例
    RAC CRS Resource资源的生命周期
    Windows上如何禁用TCP/IP自动调优特性
    11g新特性
    Exadata V2 OracleSun Database Machine数据库一体机
    Script:verify Oracle Object timestamp discrepancy
    Grid Control OMS Agent代理工作原理图
    Android 编程下报错 Exception raised during rendering: java.util.LinkedHashMap.eldest()Ljava/util/Map$Entry;
  • 原文地址:https://www.cnblogs.com/Thomas-blog/p/9728186.html
Copyright © 2011-2022 走看看