使用url下载网络图片以及流介绍
使用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下载网络图片以及流介绍的更多相关文章
- java 下载网络图片
java 如何下载网络图片 CreateTime--2017年9月30日11:18:19 Author:Marydon 说明:根据网络URL获取该网页上面所有的img标签并下载符合要求的所有图片 ...
- Android开发-下载网络图片并显示到本地
Android下载网络图片的流程是: 发送网络请求->将图片以流的形式下载下来->将流转换为Bitmap并赋给ImageView控件. 注意点 最新的Android系统不可以在主线程上请求 ...
- Python下载网络图片方法汇总与实现
本文介绍下载python下载网络图片的方法,包括通过图片url直接下载.通过re/beautifulSoup解析html下载以及对动态网页的处理等. 很多人学习python,不知道从何学起.很多人 ...
- .Net 使用爬虫下载网络图片到本地磁盘
准备: 1.新建控制台项目 2.引用System.Drawing类库 3.安装HtmlAgilityPack 1.5.2.0 4.如果不会XPath语法的话,建议简单看下 代码: static voi ...
- java 根据Url下载对应的文件到指定位置,读txt文件获取url
package test; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; im ...
- android下载网络图片并缓存
异步下载网络图片,并提供是否缓存至内存或外部文件的功能 异步加载类AsyncImageLoader public void downloadImage(final String url, final ...
- Go语言下载网络图片或文件
最近闲来无事, 于是就简单学习了下Go语言的基本的用法.由于实践才是最快的学习方法,所以这里就以下载网络图片或文件入手来学习Go语言 文件下载到本地,通常的思路就是先获得网络文件的 输入流 以及本地文 ...
- [Xcode 实际操作]八、网络与多线程-(13)使用异步方式下载网络图片
目录:[Swift]Xcode实际操作 本文将演示如何通过异步请求的方式,下载网络图片. 异步请求与同步请求相比,不会阻塞程序的主线程,而会建立一个新的线程. 在项目导航区,打开视图控制器的代码文件[ ...
- android 下载网络图片并缓存
异步下载网络图片,并提供是否缓存至内存或外部文件的功能 异步加载类AsyncImageLoader public void downloadImage(final String url, final ...
随机推荐
- SSIS Error The Execute method on the task returned error code 0x80131621
Error Message: The Execute method on the task returned error code 0x80131621 (Mixed mode assembly is ...
- html5 canvas 笔记五(合成与裁剪)
组合 Compositing globalCompositeOperation syntax: globalCompositeOperation = type 注意:下面所有例子中,蓝色方块是先绘制的 ...
- jade报错:unexpected token
背景:项目在执行gulp命令构建的时候报了jade错误,错误位置指向的是一个空白行,而这个空白行的上下文都是一些注释,错误信息显示unexpected token "pipeless-tex ...
- html里面的相对路径和绝对路径
HTML有两种路径的写法:相对路径和绝对路径. 相对路径是在同一个目录的文件引用,如果源文件和引用文件在同一个目录里,直接写引用文件名即可. 如: a.html: c:\test\menu\a ...
- Mayor's posters(线段树+离散化POJ2528)
Mayor's posters Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 51175 Accepted: 14820 Des ...
- java解析json与map,list相互之间的转换
运行这个类需要加载jar包:ezmorph-1.0.6.jar.json-lib-2.4-jdk15.jar.jsoup-1.6.1.jar.commons-beanutils-1.8.0.jar.c ...
- uploadify springMVC
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- qq2440启动linux后出现错误提示request_module: runaway loop modprobe binfmt-464c
1.情景: 编译busybox时加了make CROSS_COMPILE=arm-linux-,但是还是出现了此情况! 2.解决方案如下: 配置busybox时,在配置中发现busybox setti ...
- js获取url参数 兼容某些带#url
网上有大把现成的代码,不过有点小小的瑕疵 例如目前最流行的 正则法: function getArgument(_arg) { var reg = new RegExp("(^|&) ...
- __VA_ARGS__可变参数宏
#define qWiFiDebug(format, ...) qDebug("[WiFi] "format" File:%s, Line:%d, Function:%s ...