在Java的学习过程中IO流是比较重要,而且在工作中常常用到,对这里一定要学的透侧.
下面是实现一个网上下载图篇的程序.
package cn.chenhui.www;
/**
* 访问网址
* 下载照片
*
*
*
*/
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Random;
import org.junit.Test;
public class HttpText02 {
@Test
//创建类抛出异常
public void Text() throws IOException{
//创建对象给定网址
URL url=new URL("http://img04.tooopen.com/images/20131202/sy_49706261893.jpg");
//建立链接返回返回一个 URLConnection对象,然后强转成HttpURLConnection
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
//设置URL的请求方法 具体有GET POST
conn.setRequestMethod("GET");
//从 HTTP 响应消息获取状态码。200 是链接成功 400 是失败
int code=conn.getResponseCode();
//判断如果是200进行抓取图片
if(code==200){
//接收并高效处理
BufferedInputStream bis= new BufferedInputStream(conn.getInputStream());
//指定具体路径
File file=new File("/home/ch/file/ccc");
//判断文件夹是否存在 如果不存在 要创建一个文件夹
if(!file.exists())
//创建文件
file.mkdir();
//将接收来得图片命名写入到文件夹里
//命名定义一个随机的字符串用来命名
String name="chenhui"+System.currentTimeMillis()+/*时间*/
new Random().nextInt(99999999)/*随机编号*/+".jpg";
//创建输出流 将图片命名字符串
FileOutputStream out=new FileOutputStream(file+
File.separator/*与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。*/+name);
//创建数组进行循环读取图片
byte[] bb=new byte[1024];
//定义一个变量给定初始值为0
int len=0;
//进行循环读取 如果读到-1就停止读完
while((len=bis.read(bb))!=-1){
//输出读取内容 写入到文件内
out.write(bb,0,len);
}
//关闭资源
out.close();
bis.close();
}
}
}