美文网首页
IOUtils.copyBytes()方法

IOUtils.copyBytes()方法

作者: elrah | 来源:发表于2017-08-14 11:09 被阅读0次

    IOUtils.copyBytes()方法:
    IOUtils.copyBytes(in, out, 4096, false)
    --in:是FSDataInputStream类的对象,是有关读取文件的类,也就是所谓“输入流”
    --out:是FSDataOutputStream类的对象,是有关文件写入的类,也就是“输出流”
    --4096表示用来拷贝的buffer大小(buffer是缓冲区)--缓冲区大小
    --// true - 是否关闭数据流,如果是false,就在finally里关掉
    importjava.io.BufferedInputStream;

    importjava.io.IOException;
    importorg.apache.hadoop.conf.Configuration;
    importorg.apache.hadoop.fs.FSDataOutputStream;
    importorg.apache.hadoop.fs.FileSystem;
    importorg.apache.hadoop.fs.Path;
    importorg.apache.hadoop.io.IOUtils;
    publicclassIOUtilsDemo {
    publicstaticvoidmain(String[] args)throwsIOException {
    BufferedInputStream is =newBufferedInputStream(System.in);
    FileSystem fs = FileSystem.get(newConfiguration());
    Path outputPath =newPath("[hdfs://xxyy:9000](hdfs://xxyy:9000)"+ args[0]);
    FSDataOutputStream os = fs.create(outputPath);
    // 参数说明
    // is - 输入源
    // os - 输出源
    // 4096 - 缓冲区大小
    // true - 是否关闭数据流,如果是false,就在finally里关掉
    //        IOUtils.closeStream(is);
    //        IOUtils.closeStream(os);
    IOUtils.copyBytes(is, os,4096,true);
    System.out.println("Created file "+ outputPath +" of length "+
    fs.getFileStatus(outputPath).getLen() +" bytes.");
    }// END: main
    }// END: IOUtilsDemo
    

    在项目里,我的in和out都是通过FileSystem类
    in=locationFileSystem.open(path);
    out=fs.create(block);
    locationFileSystem和fs都是FileSystem类的对象,path和block都是路径Path类的对象
    然后IOUtils.copyBytes(in, out, 4096, false)方法实现了文件合并及上传至hdfs上

    相关文章

      网友评论

          本文标题:IOUtils.copyBytes()方法

          本文链接:https://www.haomeiwen.com/subject/oxturxtx.html