以下は、単一のリモート・ファイル・ダウンロード・ファイルの一例である
パブリック 静的 ボイドメイン(文字列[]引数)スローに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(); } }