在工作中遇到了有近七万条URL的图片链接,需要下载并且检查图片的情况。具体代码如下:
1.如何从网络中的URL中获取资源
/**
* 从网络Url中下载文件
* @param urlStr
* @param fileName
* @param savePath
* @throws IOException
*/
public static void downLoadFromUrl(String urlStr,String fileName,String savePath) throws IOException{
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
//设置超时间为3秒
conn.setConnectTimeout(3*1000);
//防止屏蔽程序抓取而返回403错误
conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
//得到输入流
InputStream inputStream = conn.getInputStream();
//获取自己数组
byte[] getData = readInputStream(inputStream);
//文件保存位置
File saveDir = new File(savePath);
if(!saveDir.exists()){
saveDir.mkdir();
}
File file = new File(saveDir+File.separator+fileName);
FileOutputStream fos = new FileOutputStream(file);
fos.write(getData);
if(fos!=null){
fos.close();
}
if(inputStream!=null){
inputStream.close();
}
System.out.println("info:"+url+" download success");
}
/**
* 从输入流中获取字节数组
* @param inputStream
* @return
* @throws IOException
*/
public static byte[] readInputStream(InputStream inputStream) throws IOException {
byte[] buffer = new byte[1024];
int len = 0;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
while((len = inputStream.read(buffer)) != -1) {
bos.write(buffer, 0, len);
}
bos.close();
return bos.toByteArray();
}
2.如何从文件中读取URL并且进行操作
//按照行来获取url
File file=new File("C:\\Users\\yejianan\\Desktop\\chuanda.txt");
BufferedReader reader=null;
String temp=null;
int line=1;
PrintWriter pw = null;
try{
reader=new BufferedReader(new FileReader(file));
while((temp=reader.readLine())!=null){
//获取特定的url的字符串
//int index=temp.indexOf('h');
//String res=temp.substring(index);//res表示url
System.out.println("line"+line+":"+temp);
try{
downLoadFromUrl(temp,line+".jpg","C:\\Users\\yejianan\\Desktop\\chuanda");
}catch (Exception e) {
// TODO: handle exception
System.out.println(e.toString());
}
line++;
}
}
catch(Exception e){
e.printStackTrace();
}
finally{
if(reader!=null){
try{
reader.close();
}
catch(Exception e){
e.printStackTrace();
}
}
}
这部分工作其实是为了减轻点开链接然后进行查看的工作量,直接通过代码进行图片的下载,然后直接进行检查和标记。