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上
网友评论