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 }
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 }
权限
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

浙公网安备 33010602011771号