温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java文件流的处理方式是什么

发布时间:2022-03-04 15:04:33 来源:亿速云 阅读:423 作者:小新 栏目:开发技术

这篇文章将为大家详细讲解有关java文件流的处理方式是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

    java 文件流的处理 文件打包成zip

    1、下载文件到本地

    public void download(HttpServletResponse response){     String filePath ="";//文件路径     String fileName ="";//文件名称     // 读到流中     InputStream inStream = new FileInputStream(filePath);     // 设置输出的格式     response.reset();      response.setContentType("bin");      response.addHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");      IOUtils.copy(inStream, response.getOutputStream()); }

    2、java后端下载

    方式一:

    new URL(fileUrl + item.getcBhFileserver()).openStream()

    方法二:

    public Boolean addFile(String url, String id, String fileName) {          RequestCallback requestCallBack = new RequestCallback() {               @Override             public void doWithRequest(ClientHttpRequest request) throws IOException {                 request.getHeaders().add("accept", MediaType.APPLICATION_OCTET_STREAM_VALUE);             }         };           ResponseExtractor<Boolean> responseExtractor = new ResponseExtractor<Boolean>() {              @Override             public Boolean extractData(ClientHttpResponse response) throws IOException {                 if (response.getStatusCode() == HttpStatus.OK) {                     //得到文件流                     InputStream input = response.getBody();                     return true;                 }                 return false;             }         };         return restTemplate.execute(url, HttpMethod.GET, requestCallBack, responseExtractor, id);     }

    3、文件打包成zip

    public void zipFilesAll() throws Exception {         String zipPath = "";//zip包路径         String zipFileName = "";//zip包名称         File zipFile = new File(zipFileName .toString());           // 创建 FileOutputStream 对象         FileOutputStream fileOutputStream = null;         // 创建 ZipOutputStream         ZipOutputStream zipOutputStream = null;         try {             //创建文件夹             zipFile = new File(zipPath );             FileUtils.forceMkdir(zipFile);               //创建文件             zipFile = new File(zipFileName .toString());             if (!zipFile.exists()) {                 zipFile.createNewFile();             }               // 实例化 FileOutputStream 对象             fileOutputStream = new FileOutputStream(zipFileName.toString());             // 实例化 ZipOutputStream 对象             zipOutputStream = new ZipOutputStream(fileOutputStream);             // 创建 ZipEntry 对象             ZipEntry zipEntry = null;             for (CL cl: ClList) {                 // 实例化 ZipEntry 对象,源文件数组中的当前文件                 zipEntry = new ZipEntry(tCltjjl.getcClmc() + ".zip");                 zipOutputStream.putNextEntry(zipEntry);                 IOUtils.copy(new FileInputStream(cl.getcPath(), zipOutputStream);             }         } catch (Exception e) {                       }finally{              //记得删除文件         }     }

    后台多文件打包成zip返回流 前台提供按钮一键下载

    项目pom文件添加二维码操作,和文件打包的maven支持:

    <!--二维码相关 start-->         <dependency>             <groupId>net.glxn.qrgen</groupId>             <artifactId>javase</artifactId>             <version>2.0</version>         </dependency>         <!--二维码相关 end-->           <!--文件打包相关 start-->         <dependency>             <groupId>org.apache.commons</groupId>             <artifactId>commons-compress</artifactId>             <version>1.12</version>         </dependency>         <!--文件打包相关 end-->

    前台代码:

    <button type="button" onclick="downloadzip()">下载</button>

    js(我用了thymeleaf模板)代码:

    <script th:inline="javascript">     function downloadzip(){               var storeType = $("#storeType").val();             if(storeType ==""){                 bootAlertError("请选择门店!");                 return;             }             var url = [[@{/downLoadProductQrCode/getStreamZip}]];               //模拟form表单 返回打包流             var form = $('<form method= "POST" action="'+ url +'" enctyped="multipart/form-data">'+                         '<input name= "agencyId" type= "hidden" value="'+storeType+'" />'                         +'</form>');             form. appendTo('body'). submit(). remove();         } </script>

    后台代码:

    /**      * @Author Ni Klaus      * @Description //TODO 门店总代生成打包产品二维码zip      * @Date 上午 10:38 2019/8/20 0020      * @Param [params,response]      * @return void      **/     @RequestMapping({"getStreamZip"})     @ResponseBody     public void findList(@RequestParam Map params,HttpServletResponse response) throws Exception {         String agencyId = (String) params.get("agencyId");         AgencyAccount agencyAccount = agencyAccountService.getAccountByAgencyId(agencyId);         //这里设置打包后的zip文件名         String downloadName = agencyAccount.getName()+".zip";         try{             response.setContentType("multipart/form-data");             response.setHeader("Content-Disposition", "attachment;fileName=" + new String(downloadName.getBytes(),"ISO8859-1"));         }catch(UnsupportedEncodingException e){             log.error("----------下载文件名编码时出现错误------"+e.getMessage());         }         OutputStream outputStream = response.getOutputStream();         ZipArchiveOutputStream zous = new ZipArchiveOutputStream(outputStream);         zous.setUseZip64(Zip64Mode.AsNeeded);         zous.setEncoding("utf-8");         try{             //我这里是通过不同产品类型生成不同产品的二维码图片流             //具体你想生成什么类型的多个文件打包,只需要循环创建ArchiveEntry 然后zous.putArchiveEntry(entry)就可以了             StoreProductType[] storeProductTypes = StoreProductType.values();             for (StoreProductType storeProductType : storeProductTypes) {                 String url = "http://m.xxx.cn/goods/pay/xxx.html?productid="+storeProductType.getProductId()                         + "&agencycode="+ agencyId +"&channelid=def&appfrom=sqjk&isstore=1";                 //打包文件里的每个文件的名字                 String imgName = storeProductType.getDescription()+".png";                 ByteArrayOutputStream out = QRCode.from(url).to(ImageType.PNG).withSize(300,300).stream();                 byte[] bytes = out.toByteArray();                 ArchiveEntry entry = new ZipArchiveEntry(imgName);                 zous.putArchiveEntry(entry);                 zous.write(bytes);                 zous.closeArchiveEntry();                 if (out != null) {                     out.close();                 }             }         }catch (Exception e){             e.printStackTrace();             log.error("---------------门店总代生成二维码打包流出错----------------"+e.getMessage());         }finally{             if(outputStream != null){                 outputStream.close();             }             if(zous != null){                 zous.close();             }         }     }

    最后效果:

    java文件流的处理方式是什么

    java文件流的处理方式是什么

    关于“java文件流的处理方式是什么”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI