现在java代码中要向hdfs上写数据,但数据要写到zip压缩包中(hdfs上存在不存在此zip包都无所谓);之前没操作过,现在记录一下
StringBuffer sb = new StringBuffer(); //zip中的文件要写入的内容
System.setProperty("HADOOP_USER_NAME","root"); //设置一下hadoop的权限
String saveZipPath = "hdfs://127.0.0.1:9000/test/server.zip"; //要将文件保存的zip包的路径(此zip包在hdfs上存在与否都无所谓)
try {
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(URI.create(saveZipPath), conf);
//构建输出流,并给定权限
FSDataOutputStream fSDataOutputStream =FileSystem.create(fs,new Path(saveZipPath),new FsPermission("777"));
//通过输出流构建压缩流
ZipOutputStream zipOutputStream = new ZipOutputStream(fSDataOutputStream);
//zip包中要存的文件的名字
zipOutputStream.putNextEntry(new ZipEntry("server.yml"));
//将要写入zip包的文件中的内容,转为byte并指定UTF-8编码
byte[] bytes = sb .toString().getBytes(StandardCharsets.UTF_8);
//向zip包的文件中写数据
zipOutputStream.write(bytes);
zipOutputStream.closeEntry();
zipOutputStream.flush();
zipOutputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
通过以上的代码,最后,在test/server.zip下会有个叫server.yml文件,文件中的内容就是上面声明的sb字段存的内容