下载网络上的图片,并且保存在指定的文件夹中

源代码:EmotionManager类

/**
 *EmotionManager.java
 *2011-11-1 下午09:35:02
 *Touch Android
 *http://bbs.droidstouch.com
 */
package Util;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;

/**
 * 下载网络上的图片的统一类,以后下载什么图片都可以调用
 */
public class EmotionManager
{

   
   
   private String root="/sdcard/emotions/";
   
   private BlockingQueue<String> urlQueue =null;
   
   
   
   public EmotionManager( int emotionSize)
   {
      urlQueue = new ArrayBlockingQueue(emotionSize);
      createDir();
   }
   
   
   public void putURL(String url)
   {
      try
      {
         urlQueue.put(url);
      } catch (InterruptedException e)
      {
         e.printStackTrace();
      }
   }
   
   public void createDir()
   {
      
      File file = new File(root);
      if(file.exists())
         file.mkdirs();
      
   }
   
   
   public void startThread()
   {
      
      new DownloadImageThread().start();
   }
   
   
   
   
   public void downEmotions(String url)
   {
      try
      {
         down(url);
      } catch (Exception e)
      {
         e.printStackTrace();
      }
      
   }
   
   
   public void down(String url) throws Exception
   {
      
      URL u = new URL(url);
      
    HttpURLConnection connection =    (HttpURLConnection) u.openConnection();
   
    String path = root + getEmotionName(url);
    saveFile(path, connection.getInputStream());
      
   }
   
   
   
   public String getEmotionName(String url)
   {
      
      return url.substring(url.lastIndexOf(".") +1);
      
   }
   
   
   
   public void saveFile(String path,InputStream is)
   {
      
      
      BufferedInputStream bis = null;
      BufferedOutputStream bos = null;
      
      FileOutputStream fos = null;
      
      
      try
      {
         bis = new BufferedInputStream(is);
         fos = new FileOutputStream(new File(path));
         bos = new BufferedOutputStream(fos);
         
         byte[] buffer = new byte[1024];
         int length;
         
         while((length = bis.read(buffer)) != -1)
         {
            bos.write(buffer, 0, length);
         }
         
      } catch (Exception e)
      {
         
      }
      finally
      {
         
         try
         {
            if(null != bis)
            {
               bis.close();
            }
            
            if(fos != null)
               fos.close();
            if(null != bos)
               {
                  bos.flush();
                  bos.close();
               
               }
            
         }
         catch (IOException e)
         {
            e.printStackTrace();
         }
      }
      
      
   }
   

   
   private  class DownloadImageThread extends Thread
   {
      
      
      private boolean isRun=true;
      
      public void shutDown()
      {
         isRun =false;
      }
      
      
      public void run()
      {
         try
         {
            while(isRun)
            {
               String url= urlQueue.poll();
               
               if(null == url) break;
               
               downEmotions(url);
            }
         }
         catch (Exception e)
         {
            
         }
         finally
         {
            shutDown();
         }
         
      }
      
      
      
      
   }
   
   
   
   
   
   
}

调用:在activity的refresh中调用

@Override
public void refresh(Object... params) {
    List<Emotion> lists= (List<Emotion>) params[0];
    EmotionManager manager = new EmotionManager(lists.size());
    for (Emotion emotion : lists)
    {
        manager.putURL(emotion.getUrl());                  //下载的url放入
        Log.i("AtActivity", emotion.getPhrase());
        Log.i("AtActivity", emotion.getUrl());
    }
    manager.startThread();                                //开启下载的线程
    progressDialog.dismiss();

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值