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://www.dlhighland.cn">張軍個人網站</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://www.dlhighland.cn
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

