以前在做流操作的時候只要獲取本地的文件,今天遇到這樣的一個問題,剛開始還不會做,后面了解了一下其實還是容易的,主要他是通過獲取到
網絡中的數據流。而這一點主要就是獲取請求的一個過程,將獲取的請求轉為文件輸入流就ok,其他的很本地獲取都是一樣的
從網絡中獲取文件
package com.mendale.test; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; /** * @說明 從網絡獲取圖片到本地 * @author yaobo * @version 1.0 * @since */ public class GetImage { /** * 測試 * @param args */ public static void main(String[] args) { String url = "http://192.168.172.169:9080/hr/employee/2016/10/40282c29581999eb015819a525230109_200_200.jpg"; byte[] btImg = getImageFromNetByUrl(url); if(null != btImg && btImg.length > 0){ System.out.println("讀取到:" + btImg.length + " 字節"); String fileName = "person.jpg"; writeImageToDisk(btImg, fileName); }else{ System.out.println("沒有從該連接獲得內容"); } } /** * 將圖片寫入到磁盤 * @param img 圖片數據流 * @param fileName 文件保存時的名稱 */ public static void writeImageToDisk(byte[] img, String fileName){ try { File file = new File("C:\\" + fileName); FileOutputStream fops = new FileOutputStream(file); fops.write(img); fops.flush(); fops.close(); System.out.println("圖片已經寫入到C盤"); } catch (Exception e) { e.printStackTrace(); } } /** * 根據地址獲得數據的字節流 * @param strUrl 網絡連接地址 * @return */ public static byte[] getImageFromNetByUrl(String strUrl){ try { URL url = new URL(strUrl); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setRequestMethod("GET"); conn.setConnectTimeout(5 * 1000); InputStream inStream = conn.getInputStream();//通過輸入流獲取圖片數據 byte[] btImg = readInputStream(inStream);//得到圖片的二進制數據 return btImg; } catch (Exception e) { e.printStackTrace(); } return null; } /** * 從輸入流中獲取數據 * @param inStream 輸入流 * @return * @throws Exception */ public static byte[] readInputStream(InputStream inStream) throws Exception{ ByteArrayOutputStream outStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while( (len=inStream.read(buffer)) != -1 ){ outStream.write(buffer, 0, len); } inStream.close(); return outStream.toByteArray(); } }