URL 获取网络资源

统一资源定位符 URL(Uniform Resource Locatior ) 相当于一个文件名在网络范围的扩展,是与网络相连的机器上的任何可访问对象的一个指针。目前支持的协议有:File、FTP、HTTP、HTTPS、JAR。

URL 类常用方法:getFile()、getHost()、getPath()、getPort()、getProtocol()、getQuery()、openConnection()、openStream()。

例:URL 获取网络中的图片,并下载到SD卡中。

 1 import java.io.File;
 2 import java.io.IOException;
 3 import java.io.InputStream;
 4 import java.net.MalformedURLException;
 5 import java.net.URL;
 6 
 7 import android.os.Bundle;
 8 import android.os.Handler;
 9 import android.os.Message;
10 import android.app.Activity;
11 import android.graphics.Bitmap;
12 import android.graphics.BitmapFactory;
13 import android.util.Log;
14 import android.view.Menu;
15 import android.widget.ImageView;
16 import android.widget.Toast;
17 
18 public class MainActivity extends Activity {
19     
20     ImageView iv;    // 预览图片
21     Bitmap bitmap;    // 图片
22     URL url;        // URL地址
23     
24     // 更新 UI
25     Handler handler = new Handler(){
26         @Override
27         public void handleMessage(Message msg) {
28             super.handleMessage(msg);
29             
30             if(msg.what == 0x100){
31                 iv.setImageBitmap(bitmap);
32             }else if(msg.what == 0x200){
33                 Toast.makeText(MainActivity.this, 
34                         "图片下载完成", Toast.LENGTH_LONG).show();
35             }
36         }
37     };
38     
39     @Override
40     protected void onCreate(Bundle savedInstanceState) {
41         super.onCreate(savedInstanceState);
42         
43         setContentView(R.layout.activity_main);
44         iv = (ImageView) findViewById(R.id.imageView1);
45         
46         // 本代码只为测试 URL 下载资源
47         // 开启子线程
48         new Thread(new Runnable(){
49             @Override
50             public void run() {
51                 try {
52                     // 资源的地址可以随机修改
53                     url = new URL("http://image1.nbd.com.cn/uploads/articles/thumbnails/28637/123.x_large.jpg");
54                     // 获取输入流
55                     InputStream is = url.openStream();
56                     // 解析成图片
57                     bitmap = BitmapFactory.decodeStream(is);
58                     Log.i("Tag", "解析图片结束");
59                     // 发送消息,通知 UI 更改
60                     handler.sendEmptyMessage(0x100);
61                     is.close();
62                     // 将该图片下载到SD卡
63                     is = url.openStream();
64                     File file = new SaveDataSDCard().writeData("download", "andr01.jpg", is);
65                     Log.i("Tag", "下载图片结束");
66                     
67                     if(file != null){
68                         handler.sendEmptyMessage(0x200);
69                     }
70                     is.close();
71                     
72                 } catch (MalformedURLException e) {
73                     // TODO Auto-generated catch block
74                     e.printStackTrace();
75                 } catch (IOException e) {
76                     // TODO Auto-generated catch block
77                     e.printStackTrace();
78                 }
79             }
80         }).start();
81     }
82 }
MainActivity

SD 卡数据存储操作类

  1 import java.io.BufferedReader;
  2 import java.io.File;
  3 import java.io.FileNotFoundException;
  4 import java.io.FileOutputStream;
  5 import java.io.IOException;
  6 import java.io.InputStream;
  7 import java.io.InputStreamReader;
  8 import java.io.PrintWriter;
  9 
 10 import android.os.Environment;
 11 import android.util.Log;
 12 
 13 /*
 14  * 用于向 sdcard 保存数据
 15  * */
 16 public class SaveDataSDCard {
 17     
 18     final static String T = "Tag";
 19     
 20     // 获取 SdCard 根路径
 21     public File getRoot(){
 22         
 23         if(Environment.getExternalStorageState()
 24                 .equalsIgnoreCase(Environment.MEDIA_REMOVED)){
 25             Log.i(T, "Sd不存在");
 26             return null;
 27         }
 28         return Environment.getExternalStorageDirectory();
 29     }
 30     
 31     // 创建文件夹
 32     public File createDir(String dirStr){
 33         
 34         File dir = new File(getRoot(),dirStr);
 35         if(!dir.exists()){
 36             dir.mkdirs();
 37         }
 38         return dir;
 39     }
 40     
 41     // 创建文件
 42     public File createFile(String filePath,String fileName){
 43         
 44         File dir = createDir(filePath);
 45         File file = new File(dir,fileName);
 46         
 47         try {
 48             if(!file.exists()){
 49                 file.createNewFile();
 50             }
 51         } catch (IOException e) {
 52             // TODO Auto-generated catch block
 53             e.printStackTrace();
 54         }
 55         return file;
 56     }
 57     
 58     /* 向指定文件中写入数据,数据位一个字符串
 59      * path: 文件路径
 60      * fileName:文件名
 61      * content:待写入字符串
 62      * */
 63     public File writeData(String path,String fileName,String content){
 64         
 65         File file = createFile(path,fileName);
 66         if(file == null) return null;
 67         PrintWriter pw = null;
 68         boolean r = false;
 69         
 70         try {
 71             pw = new PrintWriter(file);
 72             pw.println(content);
 73             pw.flush();
 74             r = true;
 75         } catch (FileNotFoundException e) {
 76             // TODO Auto-generated catch block
 77             e.printStackTrace();
 78         }finally{
 79             pw.close();
 80         }
 81         return file;
 82     }
 83     
 84     /* 向指定文件中写入数据,数据是一个输入流
 85      * path:文件路径
 86      * fileName:文件名
 87      * is:输入流
 88      * */
 89     public File writeData(String path,String fileName,InputStream is){
 90         
 91         File file = createFile(path,fileName);
 92         if(file == null) return null;
 93         FileOutputStream fos = null;
 94         byte buffer[] = new byte[1024*4];
 95         int count;
 96         
 97         try {
 98             fos = new FileOutputStream(file);
 99             while( (count=is.read(buffer))>0){
100                 fos.write(buffer, 0, count);
101             }
102             fos.flush();
103         } catch (FileNotFoundException e) {            
104             // TODO Auto-generated catch block
105             e.printStackTrace();
106         } catch (IOException e) {
107             // TODO Auto-generated catch block
108             e.printStackTrace();
109         }finally{
110             if(fos != null)
111                 try {
112                     fos.close();
113                 } catch (IOException e) {
114                     // TODO Auto-generated catch block
115                     e.printStackTrace();
116                 }
117         }
118         return file;
119     }
120 }
SaveDataSDCard.java

 

权限

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

 

posted @ 2015-05-22 16:00  壬子木  阅读(255)  评论(0)    收藏  举报