用Java判断一个URL是否有效的两种方法


用Java判断一个URL是否有效的两种方法
Java.net  方法一:


    import java.io.InputStream;  
 
    import java.net.URL;  
 
      
 
     
 
    public class Test {  
 
    public static void main(String[] args) {  
 
        URL url;  
 
        try {  
 
            url = new URL("http://www.baidu.com");  
 
            InputStream in = url.openStream();  
 
            System.out.println("连接可用");  
 
      } catch (Exception e1) {  
 
            System.out.println("连接打不开!");  
 
            url = null;  
 
       }  
 
   }  
 
  }  
 

import java.io.InputStream;
 
import java.net.URL;
 


public class Test {
 
public static void main(String[] args) {
 
        URL url;
 
        try {
 
             url = new URL("http://www.baidu.com");
 
             InputStream in = url.openStream();
 
             System.out.println("连接可用");
 
        } catch (Exception e1) {
 
             System.out.println("连接打不开!");
 
             url = null;
 
        }
 
}
 
}方法一使用java.net 下的URL类来实现,URL 是统一资源标识符的引用,一个URL实例代表着一个url的引用,然后使用了URL中的的openStream()方法。

方法二:


    import java.net.HttpURLConnection;  
 
    import java.net.URL;  
 
      
 
   /** 
    * 文件名称为:URLAvailability.java 
    * 文件功能简述: 描述一个URL地址是否有效 
    * @author Jason 
    * @time   2010-9-14  
 
   *  
 
  */  
 
   public class URLAvailability {  
 
  private static URL url;  
 
   private static HttpURLConnection con;  
 
   private static int state = -1;  
 
   
 
   /** 
      * 功能:检测当前URL是否可连接或是否有效, 
     * 描述:最多连接网络 5 次, 如果 5 次都不成功,视为该地址不可用 
      * @param urlStr 指定URL网络地址 
     * @return URL 
      */  
 
   public synchronized URL isConnect(String urlStr) {  
 
      int counts = 0;  
 
      if (urlStr == null || urlStr.length() <= 0) {                         
       return null;                   
      }  
 
     while (counts < 5) {  
 
      try {  
 
        url = new URL(urlStr);  
 
        con = (HttpURLConnection) url.openConnection();  
 
        state = con.getResponseCode();  
 
        System.out.println(counts +"= "+state);  
 
        if (state == 200) {  
 
         System.out.println("URL可用!");  
 
      }  
 
        break;  
 
     }catch (Exception ex) {  
 
        counts++;   
 
        System.out.println("URL不可用,连接第 "+counts+" 次");  
 
        urlStr = null;  
 
        continue;  
 
      }  
 
     }  
 
      return url;  
 
  }  
 
  public static void main(String[] args) {  
 
       URLAvailability u=new URLAvailability();  
 
       u.isConnect("http://www.baidu.com");  
 
   }  
 
   }  
 

import java.net.HttpURLConnection;
 
import java.net.URL;
 

/**
 
* 文件名称为:URLAvailability.java
 
* 文件功能简述: 描述一个URL地址是否有效
 
* @author Jason
 
* @time   2010-9-14 

*/
 
public class URLAvailability {
 
private static URL url;
 
private static HttpURLConnection con;
 
private static int state = -1;
 

/**
 
   * 功能:检测当前URL是否可连接或是否有效,
 
   * 描述:最多连接网络 5 次, 如果 5 次都不成功,视为该地址不可用
 
   * @param urlStr 指定URL网络地址
 
   * @return URL
 
   */
 
public synchronized URL isConnect(String urlStr) {
 
   int counts = 0;
 
   if (urlStr == null || urlStr.length() <= 0) {                       
 
    return null;                 
 
   }
 
   while (counts < 5) {
 
    try {
 
     url = new URL(urlStr);
 
     con = (HttpURLConnection) url.openConnection();
 
     state = con.getResponseCode();
 
     System.out.println(counts +"= "+state);
 
     if (state == 200) {
 
      System.out.println("URL可用!");
 
     }
 
     break;
 
    }catch (Exception ex) {
 
     counts++; 
     System.out.println("URL不可用,连接第 "+counts+" 次");
 
     urlStr = null;
 
     continue;
 
    }
 
   }
 
   return url;
 
}
 
public static void main(String[] args) {
 
        URLAvailability u=new URLAvailability();
 
        u.isConnect("http://www.baidu.com");
 
}
 
}
 

方法二使用了java.net 下的URL和HttpURLConnection两个类来实现。它使用了HttpURLConnection 中的 getResponseCode();方法,HttpURLConnection : 通常一个HttpURLConnection 的实例可以生成一个请求,它有个方法getResponseCode();可以得到请求的响应状态,该方法返回一个 int 分别是 200 and 404 如无法从响应中识别任何代码则返回 -1。
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
pHash算法是一种基于感知哈希的图像相似性比较算法,可以用来判断两幅图像的相似程度。在Android中使用pHash算法搜索相似图片的方法如下: 1. 导入pHash库 首先需要在项目中导入pHash库,可以通过以下步骤完成: - 在项目的build.gradle文件中添加以下代码: ```groovy repositories { maven { url "https://jitpack.io" } } dependencies { implementation 'com.github.quetuo:Java-Image-Processing:1.0' } ``` - 在app的build.gradle文件中添加以下代码: ```groovy android { ... defaultConfig { ... ndk { abiFilters 'armeabi-v7a' // 只编译armeabi-v7a架构的so库 } } } // 添加以下代码 task ndkBuild(type: Exec) { commandLine "$android.ndkDirectory/ndk-build", '-C', file('src/main/jni').absolutePath, '-j', Runtime.runtime.availableProcessors(), 'NDK_APPLICATION_MK=Application.mk', 'APP_BUILD_SCRIPT=Android.mk', 'APP_ABI=armeabi-v7a' } tasks.withType(JavaCompile) { compileTask -> compileTask.dependsOn ndkBuild } ``` - 在src/main目录下创建一个jni目录,并在其中创建一个Android.mk文件和一个Application.mk文件,并在这两个文件中配置pHash库的编译选项。具体内容可以参考如下代码: Android.mk: ```makefile LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := pHash LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libpHash.so include $(PREBUILT_SHARED_LIBRARY) ``` Application.mk: ```makefile APP_ABI := armeabi-v7a APP_PLATFORM := android-22 ``` 2. 实现搜索相似图片的方法 在使用pHash算法搜索相似图片之前,需要将图片转换为pHash值。可以使用Java-Image-Processing库中的ImagePHash类来计算pHash值。具体实现步骤如下: - 导入ImagePHash类 ```java import com.quetuo.imageprocessing.ImagePHash; ``` - 加载图片并计算pHash值 ```java String imagePath = "<图片路径>"; long pHash = ImagePHash.getHash(imagePath); ``` - 遍历图片库,计算每张图片的pHash值,并与目标图片的pHash值进行比较,找出最相似的图片 ```java String[] imagePaths = {"<图片路径1>", "<图片路径2>", ...}; long targetPHash = ImagePHash.getHash("<目标图片路径>"); double minDistance = Double.MAX_VALUE; String mostSimilarImagePath = null; for (String imagePath : imagePaths) { long pHash = ImagePHash.getHash(imagePath); double distance = ImagePHash.distance(pHash, targetPHash); if (distance < minDistance) { minDistance = distance; mostSimilarImagePath = imagePath; } } ``` 这就是利用pHash算法在Android中搜索相似图片的方法。需要注意的是,在遍历图片库时,pHash值之间的距离可以使用ImagePHash库中的distance方法进行计算。距离越小,说明图片越相似。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值