使用 URL 读取网络资源

本文介绍了URL(统一资源定位符)的概念及其在获取网络资源中的作用。URL通常包含协议、主机、端口和资源信息。通过URL的构造器可以创建URL对象,并使用如`getFile()`、`getHost()`等方法获取详细信息。`openConnection()`方法返回一个URLConnection对象,而`openStream()`则用于打开连接并返回InputStream,便于读取远程资源。示例中展示了如何通过URL读取网络上的图片,并将其保存至本地。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

URL (Uniform Resource Locator ) 代表同一资源定位符,它是指向互联网”资源”的指针.资源可以是简单的文件或目录.也可以是对更复杂的对象的引用.例如对数据库或搜索引擎的查询.通常情况而言..url 可以由协议名,主机,端口和资源组成.既满足如下格式: protocol://host:port/resourceName 例如如下的 Url地址https://www.baidu.com/
URL 提供了过个构造器创建url对象,可以调用如下常见方法来访问url对应的资源.

  1. String getFile() : 获取此url的资源名.
  2. String getHost () :获取此url的主机名.
  3. String getPath () : 获取此url的 路径部分.
  4. int getPort () : 获取此url的端口号.
  5. String getQuery() : 获取此url查询字符串的部分.
  6. URLConnection openConnection() : 返回一个 URLConnection 对象,它表示到url所引用的远程对象的连接.
  7. 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从网络上下载的图片.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值