HDFS批量下载文件并打成压缩包

  1. /** 
  2.     * 批量文件打包下载 
  3.     * 具体实现步骤如下: 
  4.     * 1.设置下载文件名编码 
  5.     * 2.创建zip输出流ZipOutputStream 
  6.     * 3.将需要下载的文件流循环写入ZipOutputStream 
  7.     * 4.关闭各个流 
  8.     * @param path 下载文件的地址数组 
  9.     * @param response 
  10.     * @return 
  11.     * @throws IOException 
  12.     */  
  13.    public static boolean downLoadFileList(String[] path, HttpServletResponse response) throws IOException {  
  14.        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式  
  15.        String downloadName = df.format(new Date()) + ".zip";  
  16.        response.setHeader("content-disposition""attachment;fileName=" + URLEncoder.encode(downloadName, "UTF-8"));  
  17.        FileSystem fs = FileSystem.get(conf);  
  18.        OutputStream out = response.getOutputStream();  
  19.        ZipOutputStream zos = new ZipOutputStream(out);  
  20.        for (int i = 0; i < path.length; i++) {  
  21.            InputStream in = fs.open(new Path(path[i]));  
  22.            String name = path[i].substring(path[i].lastIndexOf("/") + 1);  
  23.            byte[] buffer = new byte[1024];  
  24.            int len = 0;  
  25.            //创建zip实体(一个文件对应一个ZipEntry  
  26.            ZipEntry entry = new ZipEntry(name);  
  27.            zos.putNextEntry(entry);  
  28.            //文件流循环写入ZipOutputStream  
  29.            while ((len = in.read(buffer)) != -1 ) {  
  30.                zos.write(buffer, 0, len);  
  31.            }  
  32.            in.close();  
  33.            zos.closeEntry();  
  34.        }  
  35.        zos.close();  
  36.        return true;  
  37.    }  

 

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用以下代码将HDFS目录下的文件打包压缩包下载: ```java import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IOUtils; import org.apache.hadoop.io.compress.CompressionCodec; import org.apache.hadoop.io.compress.CompressionOutputStream; import org.apache.hadoop.io.compress.GzipCodec; import java.io.InputStream; import java.io.OutputStream; import java.net.URI; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class HdfsZipDownloadUtil { public static void downloadAsZip(String hdfsPath, String localPath) throws Exception { Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(URI.create(hdfsPath), conf); Path srcPath = new Path(hdfsPath); ZipOutputStream zos = new ZipOutputStream(fs.create(new Path(localPath))); // 使用压缩算法 CompressionCodec codec = new GzipCodec(); CompressionOutputStream cos = codec.createOutputStream(zos); // 遍历目录下所有文件并压缩 for (Path path : FileUtil.stat2Paths(fs.listStatus(srcPath))) { if (fs.isFile(path)) { String fileName = path.getName(); ZipEntry zipEntry = new ZipEntry(fileName); zos.putNextEntry(zipEntry); InputStream inputStream = fs.open(path); IOUtils.copyBytes(inputStream, cos, conf); inputStream.close(); zos.closeEntry(); } } cos.finish(); cos.close(); zos.close(); } } ``` 其中,`hdfsPath`是要下载HDFS目录路径,`localPath`是要保存到本地的文件路径。该方法会将目录下所有文件打包成 `.zip` 格式的压缩包并保存到本地。你可以按照需要修改压缩算法和保存的文件格式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值