8.10 HDFS
的I/O
操作
HDFS
也提供了相应的输入输出流, 来完成文件的读与写.
相比copyFromLocal和copyToLocal
有更多的参数可选.
其实copyFromLocal和copyToLocal
也是使用I/O
流来完成的.
8.10.1 I/O
上传文件
// 使用IO流上传文件
@Test
public void IOUpload() throws Exception {
// 1. 创建从本地磁盘读取文件的输入流
FileInputStream fis = new FileInputStream("c:/test/copy.txt");
// 2. 获取想HDFS文件的输出流
FSDataOutputStream fos = fs.create(new Path("/copy_01.txt"));
// 3. 从输入流想输出流写入数据
IOUtils.copyBytes(fis, fos, conf);
// 4. 关闭资源
IOUtils.closeStream(fis);
IOUtils.closeStream(fos);
}
8.10.2 I/O
下载文件
// 使用IO流下载文件
@Test
public void IODownload() {
// 1. 创建来自HDFS的输入流
FSDataInputStream fis = fs.open(new Path("/copy_01.txt"));
// 2. 创建写入到本地文件系统的输出流
FileOutputStream fos = new FileOutputStream("c:/test/down.txt");
// 3. 流的对拷贝
IOUtils.copyBytes(fis, fos, conf);
// 4. 关闭资源
IOUtils.closeStream(fis);
IOUtils.closeStream(fos);
}