java 多執行緒批量下載美女圖片
阿新 • • 發佈:2018-12-30
今天無聊想寫個java程式,就寫了個下載圖片的程式,從 www.meizitu.com批量下載圖片
package test; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.net.URLConnection; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.ParseException; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.protocol.BasicHttpContext; import org.apache.http.protocol.HttpContext; import org.apache.http.util.EntityUtils; public class StringUtil { public static boolean isValue(String valueToken, String value) { if (valueToken.indexOf(value) != -1) { return true; } return false; } public static String getValue(String valueToken, String startString, String endString, int unStart) { int start = valueToken.indexOf(startString); if(start==-1)return "String Error"; int end = valueToken.length(); String tempStr = valueToken.substring(start + unStart, end); end = tempStr.indexOf(endString/*, unStart*/); if (end == -1) { end = tempStr.length(); } return tempStr.substring(0, end); } public static String getValueByInt(String valueToken, String startString, int unStart) { int start = valueToken.indexOf(startString)+startString.length(); return valueToken.substring(start,start+unStart); } public static String getCut(String valueToken, String startString) { int start = valueToken.indexOf(startString)+startString.length(); return valueToken.substring(start,valueToken.length()); } } @SuppressWarnings("deprecation") class Downer{ //下載器類 DefaultHttpClient mHttpClient = new DefaultHttpClient(); HttpContext localContext = new BasicHttpContext(); HttpResponse response = null; public static void download(String urlString, String filename,String savePath) throws Exception { //下載圖片函式 // 構造URL URL url = new URL(urlString); // 開啟連線 URLConnection con = url.openConnection(); //設定請求超時為5s con.setConnectTimeout(5*1000); // 輸入流 InputStream is = con.getInputStream(); // 1K的資料緩衝 byte[] bs = new byte[1024]; // 讀取到的資料長度 int len; // 輸出的檔案流 File sf=new File(savePath); if(!sf.exists()){ sf.mkdirs(); } OutputStream os = new FileOutputStream(sf.getPath()+"\\"+filename); // 開始讀取 while ((len = is.read(bs)) != -1) { os.write(bs, 0, len); } // 完畢,關閉所有連結 os.close(); is.close(); } public void GetImageurl(String str) throws Exception //解析圖片地址函式 { @SuppressWarnings("resource") DefaultHttpClient mHttpClient=new DefaultHttpClient(); HttpContext localContext = new BasicHttpContext(); HttpResponse response = null; String result=null,url=null; try { HttpGet request = new HttpGet(str); response = mHttpClient.execute(request, localContext); if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { result= EntityUtils.toString(response.getEntity(),"gb2312"); } } catch (ParseException e) { System.out.print("e.printStackTrace();"); } catch (ClientProtocolException e) { System.out.print("e.printStackTrace();"); } catch (IOException e) { System.out.print("e.printStackTrace();"); } if(StringUtil.isValue(result, str)) { String name=StringUtil.getValue(result, "<title>","|","<title>".length()); String num=StringUtil.getValue(str, "http://www.meizitu.com/a/", ".html", "http://www.meizitu.com/a/".length()); int i=1; while(StringUtil.isValue(result, "張\" src=\"http:")) { url=StringUtil.getValue(result, "張\" src=\"http:", "\"","張\" src=\"".length()); result=StringUtil.getCut(result, "張\" src=\"http:"); download(url, num+name+(i++)+".jpg","e:\\image\\"); System.out.println(num+name+":"+url); } } } } class MyThread extends Thread{ private String name; public MyThread(String name) { this.name=name; } public void run() { Downer d=new Downer(); try { d.GetImageurl(name); } catch (Exception e) { // TODO 自動生成的 catch 塊 e.printStackTrace(); } } } public class image{ public static void main(String args[]) //主函式 { MyThread[] t=new MyThread[80];//執行緒陣列 int i=0; for(i=0;i<68;i++)//開始下載 { t[i]=new MyThread("http://www.meizitu.com/a/"+(5300+i)+".html"); t[i].start(); } } }