package zj.io.util; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.Serializable; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import zj.common.exception.ServiceException; import zj.java.util.JavaUtil; /** * 網絡文件或字符串獲取類<br> * * @version 1.00 (2011.12.02) * @author 張軍 {@link <a target=_blank href="http://m.eyofj.com">張軍個人網站</a> <a target=_blank href="http://user.qzone.qq.com/360901061/">張軍QQ空間</a>} */ public class NetWorkUtil implements Serializable { private static final long serialVersionUID = 1L; // private transient static final Logger logger = Logger.getLogger(NetWorkUtil.class); /** * 保存網絡文件 * * @param urlAddr * 遠程地址 * @param localAddr * 本地地址 * @throws Exception */ public static void writeFileToLocalByURL(String urlAddr, String localAddr) { BufferedOutputStream bos = null; BufferedInputStream fis = null; try { // 以流的形式下載文件。 URL urlObj = new URL(urlAddr); URLConnection uc = urlObj.openConnection(); fis = new BufferedInputStream(uc.getInputStream()); // 取得目標文件路徑 if (localAddr == null || localAddr.equals("")) { String[] paths = FileUtil.getFileNameExtension(urlAddr); if (paths.length > 2) { localAddr = paths[1] + paths[2]; } else { File file = new File(urlAddr); localAddr = file.getName(); } } // byte[] buffer = new byte[fis.available()]; // fis.read(buffer); File fileDesc = new File(localAddr); String[] extension = FileUtil.getFileNameExtension(localAddr); File extensionFile = new File(extension[0]); if (!extensionFile.exists()) { extensionFile.mkdirs(); } bos = new BufferedOutputStream(new FileOutputStream(fileDesc)); int blen = 1024 * 5; byte[] b = new byte[blen]; int len = 0; while ((len = fis.read(b, 0, blen)) != -1) { bos.write(b, 0, len); } bos.flush(); // logger.info("下載【" + urlAddr + "】->【" + localAddr + "】成功"); } catch (Exception e) { throw new ServiceException(e); } finally { if (bos != null) { try { bos.close(); } catch (Exception e) { e.printStackTrace(); } } if (fis != null) { try { fis.close(); } catch (Exception e) { e.printStackTrace(); } } } // // 根據String形式創建一個URL對象, // URL url = new URL(urlAddr); // // 實列一個URLconnection對象,用來讀取和寫入此 URL 引用的資源 // URLConnection con = url.openConnection(); // // 獲取一個輸入流 // InputStream is = con.getInputStream(); // BufferedInputStream bis = new BufferedInputStream(is); // // 實列一個輸出對象 // FileOutputStream fos = new FileOutputStream(fileAddr); // BufferedOutputStream bos = new BufferedOutputStream(fos); // // 用來接收每次讀取的字節個數 // int length = -1; // // 一個byte[]數組,一次讀取多個字節 // byte[] buffer = new byte[7092]; // // 循環判斷,如果讀取的個數b為空了,則is.read()方法返回-1,具體請參考InputStream的read(); // while ((length = bis.read(buffer, 0, 7092)) != -1) { // // 將對象寫入到對應的文件中 // bos.write(buffer, 0, length); // } // // 刷新流 // bos.flush(); // fos.flush(); // // 關閉流 // bos.close(); // fos.close(); // bis.close(); // is.close(); } /** * 獲取網絡字符串 編碼默認GB2312 * * @param url * 遠程地址 * @return 遠程地址響應結果 */ public static String getStringByURL(String url) { return getStringByURL(url, "GB2312"); } /** * 獲取網絡字符串 編碼默認GB2312 * * @author zhangjun * @param url * 遠程地址 * @param encoding * 網頁的編碼集 * @return 遠程地址響應結果 */ public static String getStringByURL(String url, String encoding) { StringBuffer sb = new StringBuffer(); // 建立文件寫入流 // 建立緩沖寫入流 BufferedReader br = null; try { // 建立網絡連接 URL urlObj = new URL(url); // 打開網絡連接 URLConnection uc = urlObj.openConnection(); // uc.setRequestProperty("User-Agent", "java"); // 建立文件寫入流 // 建立緩沖寫入流 br = new BufferedReader(new InputStreamReader(uc.getInputStream(), encoding)); String sLine = null; sLine = br.readLine(); sLine = JavaUtil.readFirstLine(sLine); if (sLine != null) { sb.append(sLine); while ((sLine = br.readLine()) != null) { // 一邊讀,一邊寫 // sb.append(sLine + System.getProperty("line.separator")); sb.append(sLine); } } } catch (MalformedURLException e) { throw new ServiceException("連接網絡失敗", e); } catch (IOException e) { throw new ServiceException("打開網絡連接失敗", e); } finally { if (br != null) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } return sb.toString(); } }
本文為張軍原創文章,轉載無需和我聯系,但請注明來自張軍的軍軍小站,個人博客http://m.eyofj.com
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
