1. 程式人生 > >java 多執行緒批量下載美女圖片

java 多執行緒批量下載美女圖片

今天無聊想寫個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();
		}
    }
}