使用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 ...
随机推荐
- 数位DP 求K进制下0~N的每个数每位上出现的数的总和
好久没写博客了,因为感觉时间比较紧,另一方面没有心思,做的题目比较浅也是另一方面. 热身赛第二场被血虐了好不好,于是决定看看数位DP吧. 进入正题: 如题是一道经(简)典(单)的数位dp. 第一步,对 ...
- confluence重置admin密码
复方法: 1. 运行此sql 找到你的管理员帐户: select u.id, u.user_name, u.active from cwd_user u join cwd_membership m o ...
- Windows便笺 快捷键
便笺快捷键 便笺快捷键多数与Office相同 Ctrl+N 新建 Alt+F4 关闭便笺,下次打开内容还在 Ctrl+D 删除 Ctrl+E 居中 Ctrl+R 右对齐 Ctrl+L 左对齐 Ctrl ...
- DIV 垂直 垂直水平 居中
DIV 垂直 居中 让div居中对齐 使用margin-left:auto;margin-right:auto; 可以让你的div居中对齐. .style{margin-left:auto;marg ...
- 用jquery实现简单的表单验证
HTML代码: 1 <form action="" method="post" id="form-data"> 2 <di ...
- Oracle使用经验总结
oracle数据库是一种大型数据库系统,一般应用于商业,政府部门,它的功能很强大,能够处理大批量的数据,在网络方面也用的非常多.Oracle数据库管理系统是一个以关系型和面向对象为中心管理数据的数据库 ...
- mac系统mysql配置环境变量(转)
mac初次安装mysql,输入mysql -u root -p会出现:zsh: command not found: mysql的提示.此时需要配置环境变量. mac版mysql客户端:mysql-5 ...
- CSS3中的2D转换
通过 CSS3 转换,我们能够对元素进行移动.缩放.转动.拉长或拉伸. 转换是使元素改变形状.尺寸和位置的一种效果. 注:Internet Explorer 10.Firefox 以及 Opera 支 ...
- git github 异常
git :版本控制工具 github:项目托管 git clone failed:git是否安装正确 github commit failed:github 是否账号 / 密码是否正确(密码错误也可以 ...
- 由两点坐标如何画出直线 matlab
由两点坐标如何画出直线 方法1:利用直线方程 斜率加截距 方法2:数据拟合 %由两点坐标得数据拟合直线与画线 x = [,]; y = [,]; k = ((-)/(-));% 由两点坐标得到直线斜 ...