ページ単一のリモートサーバと複数のファイルをダウンロードし、ラベルされたローカル・アーカイブにダウンロードします

以下は、単一のリモート・ファイル・ダウンロード・ファイルの一例である

パブリック
静的 ボイドメイン(文字列[]引数)スローにIOException { URL HTTPUrl = 新しい新しい URL(「http://yingufile-private.oss-cn-beijing.aliyuncs.com/PHYY/jpgを/ 20170628 / a85ab00c645e4b89dc38f3b8bb63a4f3 " ); HttpURLConnectionのhttpConn = (HttpURLConnectionの)httpurl.openConnection(); httpConn.setDoOutput(真の); // 出力用のURL接続を使用 httpConn.setDoInput(真の); // 入力用のURL接続を使用 httpConn.setUseCaches (); // キャッシュを無視 httpConn.setRequestMethod( "GET"); // URLリクエストメソッドを設定 // リクエストヘッダ提供することができる httpConn.setRequestProperty( "Content-Typeの"、 "ファイルapplication / octet-streamと" ;) httpConn.setRequestProperty( "接続"、「キープを"); -alive //が長い接続を維持 httpConn.setRequestProperty("文字セット"" UTF-8 " ); // リクエストヘッダを設けてもよい バイト []ファイル= ;)input2byte(httpConn.getInputStream() 、writeBytesToFile(ファイル " D://333.png " ); System.out.printlnは(ファイル); } 公共の 静的な エンド・ バイト[] input2byte(入力ストリームinStreamには) スローIOExceptionが{ ByteArrayOutputStream swapStream = 新しいByteArrayOutputStream(); バイト []バフ= 新しい バイト [100 ]; int型 RC = 0 ; 一方、((RC = inStream.read(バフ、0、100))> 0 ){ swapStream.write(バフ、 0 、RC)。 } バイト [] IN2B = swapStream.toByteArray()。 返すIN2B; } 公共の 静的ファイルwriteBytesToFile(バイト[] B、ストリングOUTPUTFILE){ ファイルファイル = NULL ; FileOutputStream OS = nullを 試す{ ファイル = 新しいファイル(OUTPUTFILE)。 OS = たFileOutputStream(ファイル); os.write(B)。 } キャッチ(例外var13){ var13.printStackTrace()。 } 最後に{ しようと{ 場合(!OS = ヌル){ にos.close(); } } キャッチ(のIOExceptionのvar12){ var12.printStackTrace()。 } } リターンファイル。 }

 

再帰的な圧縮方法を参照します。https://www.cnblogs.com/zeng1994/p/7862288.html

次のように統合コードの後:

          String []型= fid.split FIDS( "" ); 
                 System.out.printlnは( "圧縮..." ); 
                 ZIPファイルファイル = 新しい新しいファイル(「C://ユーザー管理者// // // ZIPファイルのデスクトップを「.zipファイル);
                  // 作成した出力ストリームは、ZIP 
                 ZipOutputStream OUT = 新しい新しい ZipOutputStream(新新のFileOutputStream(ZIPファイル)); 
                 
                 // バッファリングされた出力ストリームを作成 
                 BufferedOutputStreamがBOS = 新新なBufferedOutputStreamザ・(OUT); 
                 地図 <文字列、文字列> MP = 新しい新しい HashMapを<文字列、文字列> ()
                  のために(文字列I:のFID){ 
                     Networkfile NF = networkfileService.selectById(Integer.parseInt(I))。
                    // 0移动端、1电脑
                    場合( "0" .equals(n型)){ 
                        mp.put( "download_idに" 、nf.getSf_fid())。
                        mp.put( "download_name" 、nf.getName()); 
                        JSONObject jsonObject = JSONObject.fromObject(MP)。
                        文字列の日付 = jsonObject.toString(); 
                        response.getWriter()プリント(日付)。
                    } {
                         // 调用打包函数
                        圧縮(OUT、BOS、NF、nf.getName())。
                    } 
                 } 
                    
                 mp.put( "download_idに"、 "" ); 
                 JSONObject jsonObject = JSONObject.fromObject(MP)。
                 文字列の日付 = jsonObject.toString(); 
                
                 response.getWriter()プリント(日付)。
                 
                 bos.close(); 
                 out.close(); 
                 System.out.println( "压缩完成");

包装機能:

/ * ファイルはZIPパッケージ化されている* / 
    パブリック 無効湿布(ZipOutputStream OUT、BufferedOutputStreamがBOS、NFのNetworkfile、文字列ベース)スロー例外を
    { 
        // もしディレクトリ(フォルダ)へのパス
        IF(nf.getType()== 1)// ファイルフォルダsourceFile.isDirectory()
        {
             // アウトフォルダ内のファイル(またはサブフォルダ)が
             // ()[] =フィールド・リストのsourceFile.listFilesファイル、 
            文字列パラメータ= "UID:" nf.getUid +()+」を、 file_pid:「+ nf.getId(); 
            リスト <Networkstructure> LISTF = networkstructureService.selectAllFile(パラメータ); 
            
            IF(listf.size()== 0)//フォルダが空の場合は、単に先のzipファイルのディレクトリに書き込まれたエントリポイント
            { 
                System.out.printlnは(基本 +「/」); 
                out.putNextEntry(   新しい新しいまたはZipEntry(基本+「/」)); 
            } 
            他には、// フォルダが空でない場合は、再帰呼び出し圧縮、ファイル(またはフォルダ)内の各フォルダが圧縮されている
            {
                 のためにint型 I 0 =;私は++;私はlistf.size()< 
                { 
                    Networkfile newnfを = networkfileService.selectById(listf.get(I).getFid()); 
                    圧縮(OUT、BOS、newnf、ベース + "/" + listf.get(I).getFile_name()); 
                }
            } 
        }
        他に// そうでない場合は、ディレクトリ(フォルダ)は、ファイルはzipファイルに書き込まれた後の最初のディレクトリエントリ・ポイント、書き込み、ファイルである
        { 
            HTTPUrlのURL = 新新(「HTTPのURLを://***.*** 。。*** **:**** /「+ nf.getSf_fid()); 
            HttpURLConnectionのhttpConn = (HttpURLConnectionの)httpurl.openConnection(); 
            httpConn.setDoOutput(真の); // 出力用URL接続を使用 
            httpConnを。 setDoInput(真の); // 入力用のURL接続を使用 
            (httpConn.setUseCaches falseにする); // キャッシュされたignoreは 
            ( "GET")httpConn.setRequestMethod; //URLリクエストの設定方法は、
             // リクエストヘッダを設けてもよい 
            httpConn.setRequestProperty(「コンテンツタイプ」、「ファイルアプリケーション/オクテットストリーム」); 
            httpConn.setRequestProperty(「接続」、「キープアライブ」); // 維持長い接続 
            httpConn .setRequestProperty( "文字セット"、 "UTF-8" );
             //は、リクエストヘッダを設けてもよい
            バイト []ファイル= ; input2byte(httpConn.getInputStream())
            
            out.putNextEntry(新しい新しいまたはZipEntry(ベース));
             // ソースファイルをするために書かれたzipファイル 
            (ファイル)out.write; // 圧縮出力
            out.closeEntry(); 
        } 
    }

 

おすすめ

転載: www.cnblogs.com/mangwusuozhi/p/10942539.html