java-如何按照URL從網路中下載資源
阿新 • • 發佈:2018-12-30
在工作中遇到了有近七萬條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(); } } }
這部分工作其實是為了減輕點開連結然後進行檢視的工作量,直接通過程式碼進行圖片的下載,然後直接進行檢查和標記。