溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

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

發(fā)布時間:2022-03-04 15:04:33 來源:億速云 閱讀:355 作者:小新 欄目:開發(fā)技術(shù)

這篇文章將為大家詳細講解有關(guān)java文件流的處理方式是什么,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

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

    1、下載文件到本地

    public void download(HttpServletResponse response){
        String filePath ="";//文件路徑
        String fileName ="";//文件名稱
        // 讀到流中
        InputStream inStream = new FileInputStream(filePath);
        // 設(shè)置輸出的格式
        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());
     
            // 創(chuàng)建 FileOutputStream 對象
            FileOutputStream fileOutputStream = null;
            // 創(chuàng)建 ZipOutputStream
            ZipOutputStream zipOutputStream = null;
            try {
                //創(chuàng)建文件夾
                zipFile = new File(zipPath );
                FileUtils.forceMkdir(zipFile);
     
                //創(chuàng)建文件
                zipFile = new File(zipFileName .toString());
                if (!zipFile.exists()) {
                    zipFile.createNewFile();
                }
     
                // 實例化 FileOutputStream 對象
                fileOutputStream = new FileOutputStream(zipFileName.toString());
                // 實例化 ZipOutputStream 對象
                zipOutputStream = new ZipOutputStream(fileOutputStream);
                // 創(chuàng)建 ZipEntry 對象
                ZipEntry zipEntry = null;
                for (CL cl: ClList) {
                    // 實例化 ZipEntry 對象,源文件數(shù)組中的當前文件
                    zipEntry = new ZipEntry(tCltjjl.getcClmc() + ".zip");
                    zipOutputStream.putNextEntry(zipEntry);
                    IOUtils.copy(new FileInputStream(cl.getcPath(), zipOutputStream);
                }
            } catch (Exception e) {
                 
            }finally{
                 //記得刪除文件
            }
        }

    后臺多文件打包成zip返回流 前臺提供按鈕一鍵下載

    項目pom文件添加二維碼操作,和文件打包的maven支持:

    <!--二維碼相關(guān) start-->
            <dependency>
                <groupId>net.glxn.qrgen</groupId>
                <artifactId>javase</artifactId>
                <version>2.0</version>
            </dependency>
            <!--二維碼相關(guān) end-->
     
            <!--文件打包相關(guān) start-->
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-compress</artifactId>
                <version>1.12</version>
            </dependency>
            <!--文件打包相關(guān) 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 門店總代生成打包產(chǎn)品二維碼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);
            //這里設(shè)置打包后的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("----------下載文件名編碼時出現(xiàn)錯誤------"+e.getMessage());
            }
            OutputStream outputStream = response.getOutputStream();
            ZipArchiveOutputStream zous = new ZipArchiveOutputStream(outputStream);
            zous.setUseZip64(Zip64Mode.AsNeeded);
            zous.setEncoding("utf-8");
            try{
                //我這里是通過不同產(chǎn)品類型生成不同產(chǎn)品的二維碼圖片流
                //具體你想生成什么類型的多個文件打包,只需要循環(huán)創(chuàng)建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文件流的處理方式是什么

    關(guān)于“java文件流的處理方式是什么”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

    向AI問一下細節(jié)

    免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI