使用url下载网络图片的时候,首先需要建立一个URL对象,然后使用一个输入流获取该URL中的内容。之后使用读取该输入流的内容,使用一个输出流写到本地文件中。最后关闭输入和输出流。下面是一个简单的下载代码。

    public static void download(String urlString, String filename, String savePath) {
        URL url = null;
        OutputStream os = null;
        URLConnection con = null;
        InputStream is = null;
        try {
            url = new URL(urlString);
            con = url.openConnection();
            con.setConnectTimeout(5 * 1000);
            is = con.getInputStream();
            byte[] bs = new byte[1024];
            int len;
            File sf = new File(savePath);
            if (!sf.exists()) {
                sf.mkdirs();
            }
            os = new FileOutputStream(sf.getPath() + "\\" + filename);
            while ((len = is.read(bs)) != -1) {
                os.write(bs, 0, len);
            }
        } catch (IOException e1) {
            e1.printStackTrace();
        } finally {
           try {
                if(os != null)
                    os.close();
            } catch (IOException e1) {
                e1.printStackTrace();
            } 
            try {
                if(is != null)
                  is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            }
        }
    }   

什么是流。

流是一个抽象的概念,是对输入输出设备的抽象,java程序中,对于程序的输入输出操作都是以"流"的方式进行。设备可以是文件,网络,内存等。
流具有方向,至于是输入流还是输出流则是一个相对的概念,一般以程序为参考,如果数据的流向是程序至设备,我们称之为输出流,反之我们称为输入流。
当文件需要从某个数据源读入数据的时候,就会开启一个输入流,数据源可以是文件、内存或网络等等。相反的,需要写出数据到某个数据源目的地的时候,也会开
启一个输出流,这个数据源目的地也可以是文件、内存或网络等等。流的使用结束必须关闭流,如果不进行关闭的化会一直占用内存可能早成内存的泄露。

总结:

数据流:一组有序,有起点和终点的字节的数据序列。包括输入流和输出流。
输入流:程序从输入流读取数据源。数据源包括外界(键盘、文件、网络),即将数据读入程序的通信通道。
输出流:程序向输出流写入数据。将程序中的数据输出到外界(显示器、文件、网络)的通信通道。
数据的传输就是数据流的传输,流的重定向就是输入或者输出的改变。

流有哪些分类

可以从不同的角度对流进行分类:

1、处理的数据单位不同,可分为:字符流,字节流

2、数据流方向不同,可分为:输入流,输出流

3、功能不同,可分为:节点流,处理流

节点流:节点流从一个特定的数据源读写数据。即节点流是直接操作文件,网络等的流。例如FileInputStream和FileOutputStream,他们直接从文中读取或往文中写入字节流。

处理流:“连接”在已存在的流之上通过对数据的处理为程序提供更加强大的读写功能。处理流是使用一个已经存在的输入流或输出流连接创建的,过滤流就
是对节点流进行一系列的包装例如BufferedInputStream和BufferedOutputStream,使用已经存在的节点流来构建,提供
带缓冲的读写,提高了读写的效率。

字节流和字符流的区别:

1.读写单位不同:字节流以字节为单位读取,字符流以字符为单位,根据编码表映射字符一次可以读取多个字节。

2.处理对象不同:字节流能处理所有的类型数据,而字符流只能处理字符类型的数据。

3.字节流在操作的时候是不会用到缓冲区的,是文件本身的直接操作;而字符流在操作的时候会用到缓冲区。

结论:优先使用字节流。首先因为硬盘上的所有文件都是以字节的形式进行传输或者保存的,包括图片等内容。但是字符只是在内存中才会形成的,所以在开发中,字节流使用广泛。

IOException异常类的子类

1.public class  EOFException :
非正常到达文件尾或输入流尾时,抛出这种类型的异常。

2.public class FileNotFoundException:
当文件找不到时,抛出的异常。

3.public class InterruptedIOException:
当I/O操作被中断时,抛出这种类型的异常

使用url下载网络图片以及流介绍的更多相关文章

  1. java 下载网络图片

      java 如何下载网络图片 CreateTime--2017年9月30日11:18:19 Author:Marydon 说明:根据网络URL获取该网页上面所有的img标签并下载符合要求的所有图片 ...

  2. Android开发-下载网络图片并显示到本地

    Android下载网络图片的流程是: 发送网络请求->将图片以流的形式下载下来->将流转换为Bitmap并赋给ImageView控件. 注意点 最新的Android系统不可以在主线程上请求 ...

  3. Python下载网络图片方法汇总与实现

    本文介绍下载python下载网络图片的方法,包括通过图片url直接下载.通过re/beautifulSoup解析html下载以及对动态网页的处理等. ​ 很多人学习python,不知道从何学起.很多人 ...

  4. .Net 使用爬虫下载网络图片到本地磁盘

    准备: 1.新建控制台项目 2.引用System.Drawing类库 3.安装HtmlAgilityPack 1.5.2.0 4.如果不会XPath语法的话,建议简单看下 代码: static voi ...

  5. java 根据Url下载对应的文件到指定位置,读txt文件获取url

    package test; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; im ...

  6. android下载网络图片并缓存

    异步下载网络图片,并提供是否缓存至内存或外部文件的功能 异步加载类AsyncImageLoader public void downloadImage(final String url, final ...

  7. Go语言下载网络图片或文件

    最近闲来无事, 于是就简单学习了下Go语言的基本的用法.由于实践才是最快的学习方法,所以这里就以下载网络图片或文件入手来学习Go语言 文件下载到本地,通常的思路就是先获得网络文件的 输入流 以及本地文 ...

  8. [Xcode 实际操作]八、网络与多线程-(13)使用异步方式下载网络图片

    目录:[Swift]Xcode实际操作 本文将演示如何通过异步请求的方式,下载网络图片. 异步请求与同步请求相比,不会阻塞程序的主线程,而会建立一个新的线程. 在项目导航区,打开视图控制器的代码文件[ ...

  9. android 下载网络图片并缓存

    异步下载网络图片,并提供是否缓存至内存或外部文件的功能 异步加载类AsyncImageLoader public void downloadImage(final String url, final ...

随机推荐

  1. nodejs框架express快速开始

    认识express 创建应用 get请求 简述中间件 all方法 use方法1 use方法2 回调函数 获取主机.路径名 Get请求 - query Get请求 - param Get请求 - par ...

  2. udhcpc命令【转】

    udhcpc -i usb0 route 转自:http://blog.csdn.net/hshl1214/article/details/8684740 由于要使用网络通讯,所以不可避免的要用到dh ...

  3. Centos6.7安装docker1.7.1

    Docker当前发布的最新版本已经到了1.11,其官网上针对Centos的的安装需求如下: Docker requires a -bit installation regardless of your ...

  4. Maven单元测试报告及测试覆盖率

     对junit单元测试的报告:类似这样的结果 ------------------------------------------------------- T E S T S ----------- ...

  5. Tomcat6性能优化

    1.内存设置      Windows环境下修改“%TOMCAT_HOME%\bin\catalina.bat”文件,在文件开头增加如下设置:set JAVA_OPTS=-Xms256m -Xmx51 ...

  6. WampServer中MySQL中文乱码解决

    1.修改mysql的my.ini文件: 在 [client] 下面增加 default-character-set=utf8 在 [mysqld] 下面增加: character_set_server ...

  7. session失效后,登录页面嵌入iframe框架

    在登录页面的onload方法中加入以下代码解决: //防止登录页面嵌入iframe框架 if (top.location != self.location){ top.location=self.lo ...

  8. 解决PowerDesigner 生成Sql2005-2012 找不到sysproperties表的问题

    造成此问题的原因是由于Sql 2005 删除了系统表 sysproperties 而改用 sys.extended_properties 表所致 ,微软的目的不再去猜测网上有二种解决方式 但不符合本人 ...

  9. CSS之盒子模型及常见布局

    盒子模型的综合应用 CSS提高1 Div   ul    li 的综合应用很多的网页布局现在都用到这种模式 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTM ...

  10. sql基本操作

    SQL功能 数据查询 SELECT 数据定义 CREATE,  DROP,   ALTER 数据操纵 INSERT,   UPDATE,   DELETE 数据控制 GRANT,  REVOKE 创建 ...