用 JAVA 判斷一個URL是否有效--CTO

最近因項目需求,需要針對一些URL地址進行檢測是否可用,剛開始考濾的是用InputStream 以流的形式來實現,讀取網頁的<title></title>元素做出判斷,但這種方式試了幾次就沒有再考濾使用,因通過這種方式檢測網頁的 title 可能會有幾種形式出現,比如大小寫問題,那這樣寫代碼就要進行多一些的判斷,這個不行就判斷下一個,但這樣不但會消耗系統資源,而且更腦火的是有時檢測不出來一個URL是否可連接,因爲有些網頁連接後失敗有可能會轉發到另一個網頁, 後來就考濾用 java.net 下的類來實現,說實在的 java.net 下的類我還從來沒用過,以前開發項目也沒搞過這一塊,所以就研究了一下,在網上也找了一些資料,都沒找到相關的處理方式,所以這個文章就產生了,我們用到了 URL和HttpURLConnection 二個類 ,URL 是統一資源標識符的引用,一個URL實例代表着一個url的引用, HttpURLConnection : 通常一個HttpURLConnection 的實例可以生成一個請求,它有個方法 getResponseCode();可以得到請求的響應狀態,該方法返回一個 int 分別是 200 and 404 如無法從響應中識別任何代碼則返回 -1,現在就讓我們來實現一下吧! 請看代碼清單一:                                                                                                                                      清單一: URLAvailability.java

package com.xxxxxxxxxxxxxxxxxxxxx;
import java.net.HttpURLConnection;
import java.net.URL;

import org.apache.log4j.Logger;

/**
 * 
 *
 * 文件名稱爲:URLAvailability.java
 * 
 * 文件功能簡述: 描述一個URL或圖片地址是否有效
 * 
 * @author ChenTao
 * @version 
 * @time 2008-5-29 上午10:00:35
 * @copyright  */
@SuppressWarnings("unused")
public class URLAvailability {

	private static Logger logger = Logger.getLogger(URLAvailability.class);

	private static URL urlStr;

	private static HttpURLConnection connection;

	private static int state = -1;

	private static String succ;

	/**
	 * 功能描述 : 檢測當前URL是否可連接或是否有效,
	 * 最多連接網絡 5 次, 如果 5 次都不成功說明該地址不存在或視爲無效地址.
	 * 
	 * @param url
	 *            指定URL網絡地址
	 * 
	 * @return String
	 */
	private synchronized String isConnect(String url) {
		int counts = 0;
		succ = null;
                  if (url == null || url.length() <= 0) {
    return succ;
   } while (counts < 5) { try { urlStr = new URL(this.getUrl()); connection = (HttpURLConnection) urlStr.openConnection(); state = connection.getResponseCode(); if (state == 200) { succ = connection.getURL().toString(); } break; } catch (Exception ex) { counts++; logger.info("loop :" + counts); continue; } } return succ; } } 問題解決了,循環是因爲怕網絡連接狀態忙,第一次可能連接不上,但很少,一千個地址有可能只有那麼一二個,
大家可能看到該方法實現了同步,這個必須要加,要不能會造成多線程問題,後果就不說了, 現在本人有個問題就是
如何用 java 檢測電腦的連網狀態,是斷開還是以連接上,也就是該電腦有沒有和網絡連接,
知道的朋友可在回貼中提供解決方法,謝謝!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章