使用 URL 读取网络资源
2016-07-02 12:46
337 查看
URL (Uniform Resource Locator ) 代表同一资源定位符,它是指向互联网”资源”的指针.资源可以是简单的文件或目录.也可以是对更复杂的对象的引用.例如对数据库或搜索引擎的查询.通常情况而言..url 可以由协议名,主机,端口和资源组成.既满足如下格式:
URL 提供了过个构造器创建url对象,可以调用如下常见方法来访问url对应的资源.
String getFile() : 获取此url的资源名.
String getHost () :获取此url的主机名.
String getPath () : 获取此url的 路径部分.
int getPort () : 获取此url的端口号.
String getQuery() : 获取此url查询字符串的部分.
URLConnection openConnection() : 返回一个 URLConnection 对象,它表示到url所引用的远程对象的连接.
InputStream openStream() : 打开与此url 的连接,并返回一个用于读取该url资源的 InputStream.
URL提供的openStream() 可以读取该URL资源的 InputStream, 该方法可以非常方便的读取远程资源.
运行改程序不仅会显示该url对象所对应的图片,而且还会在手机文件系统的 /data/data/packageName/files/目录下生成的”xxxx.png”图片,该图片就是通过 url从网络上下载的图片.
protocol://host:port/resourceName例如如下的 Url地址
https://www.baidu.com/
URL 提供了过个构造器创建url对象,可以调用如下常见方法来访问url对应的资源.
String getFile() : 获取此url的资源名.
String getHost () :获取此url的主机名.
String getPath () : 获取此url的 路径部分.
int getPort () : 获取此url的端口号.
String getQuery() : 获取此url查询字符串的部分.
URLConnection openConnection() : 返回一个 URLConnection 对象,它表示到url所引用的远程对象的连接.
InputStream openStream() : 打开与此url 的连接,并返回一个用于读取该url资源的 InputStream.
URL提供的openStream() 可以读取该URL资源的 InputStream, 该方法可以非常方便的读取远程资源.
package com.net.httpurl; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.MalformedURLException; import java.net.URL; /** * 使用 Url读取网络资源 */ public class UrlTestActivity extends AppCompatActivity { ImageView show; Bitmap mBitmap; //代表从网络下载得到的图片 EditText path; Button btn; Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { if (msg.what == 0x123) { show.setImageBitmap(mBitmap); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_url_test); show = (ImageView) findViewById(R.id.iv_show); path = (EditText) findViewById(R.id.et_path); btn = (Button) findViewById(R.id.btn); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new Thread() { @Override public void run() { super.run(); String path_url = path.getText().toString().trim(); //String path_url = "https://www.baidu.com/img/bd_logo1.png"; //定义一个url 对象 try { URL url = new URL(path_url); //打开该 url 对应的输入流 InputStream is = url.openStream(); //从 InputStream 中解析图片 mBitmap = BitmapFactory.decodeStream(is); //发送消息 通知ui 组件显示该图片 mHandler.sendEmptyMessage(0x123); is.close(); //------------------------- /** * 两次使用了 url.openStream()方法; * 第一次使用了 BitmapFactory.decodeStream(is);方法来解析该输入流中图片 * 第2次 是使用IO 将输入流中的图片下载到本地 * */ ///----------------------------------------------------------------- //再次 打开该 url 对应的输入流 is = url.openStream(); //打开手机文件对应的输出流 OutputStream os = openFileOutput("aaaa.png",MODE_PRIVATE); byte[] buff = new byte[1024]; int len = 0; //url对应的资源下载到本地 while ((len=is.read(buff))>0){ os.write(buff,0,len); } is.close(); os.close(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }.start(); } }); } }
运行改程序不仅会显示该url对象所对应的图片,而且还会在手机文件系统的 /data/data/packageName/files/目录下生成的”xxxx.png”图片,该图片就是通过 url从网络上下载的图片.