您的位置:首页 > 理论基础 > 计算机网络

使用 URL 读取网络资源

2016-07-02 12:46 337 查看
URL (Uniform Resource Locator ) 代表同一资源定位符,它是指向互联网”资源”的指针.资源可以是简单的文件或目录.也可以是对更复杂的对象的引用.例如对数据库或搜索引擎的查询.通常情况而言..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从网络上下载的图片.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  url 网络