Java 正在检查有效的URL、URI构造

Java 正在检查有效的URL、URI构造,java,validation,url,uri,Java,Validation,Url,Uri,我有一个程序,可以从网页上刮下链接,然后测试链接是否正常工作或断开。有一点我有点麻烦,那就是确保URL实际上是有效的 有问题的链接只是为了确保该网站从最终用户的角度正确运行。所以主要是http、https和mailto协议,我不确定是否还有其他协议,比如ftp,但我希望能够处理所有意外情况 到目前为止,这里是我构建URI的代码。在此之前,我已经从其他页面中删除了链接: private boolean isValidURI(String checkUrl){ boolean validUR

我有一个程序,可以从网页上刮下链接,然后测试链接是否正常工作或断开。有一点我有点麻烦,那就是确保URL实际上是有效的

有问题的链接只是为了确保该网站从最终用户的角度正确运行。所以主要是http、https和mailto协议,我不确定是否还有其他协议,比如ftp,但我希望能够处理所有意外情况

到目前为止,这里是我构建URI的代码。在此之前,我已经从其他页面中删除了链接:

private boolean isValidURI(String checkUrl){
    boolean validURI = false;
    checkUrl = "this could be a link for some reason.com"; //set to link you want to test
    //Decodes checkUrl - Some links may already be encoded. This sets everything to a default of non-encoded urls.
    try {
        checkUrl = URLDecoder.decode(checkUrl, "UTF-8");
    } catch (UnsupportedEncodingException e1) {
        e1.printStackTrace();
        System.out.println("Error 1: "+checkUrl);
    }
    //Encodes checkUrl, allows URLs with various characters.
    try {
        url = new URL(checkUrl);
    } catch (MalformedURLException e2) {
        e2.printStackTrace();
        System.out.println("Error 2: "+checkUrl);
    }

    try {
        uri = new URI(url.getProtocol(), url.getAuthority(), url.getPath(), url.getQuery(), url.getRef());
        System.out.println(uri);
        validURI = true;
    } catch (URISyntaxException e3) {
        e3.printStackTrace();
        System.out.println("Error 3: "+checkUrl);
    }       

    return validURI;
}
我在这里遇到的困难是,如果我在没有有效协议的情况下插入一个链接,例如,我得到的“this is the link.com”

位于java.net.URL。(未知源)
位于java.net.URL。(未知源)
位于java.net.URL。(未知源)
在xboxtools.PingUrl.isValidURI(PingUrl.java:106)
位于xboxtools.PingUrl.setLinkStatus(PingUrl.java:47)
在xboxtools.PingUrl。(PingUrl.java:28)
在xboxtools.LocaleTab.runLocaleActionPerformed(LocaleTab.java:179)上
在xboxtools.LocaleTab$1$1.run(LocaleTab.java:71)
位于java.lang.Thread.run(未知源)
线程“thread-2”java.lang.NullPointerException中的异常
在xboxtools.PingUrl.isValidURI(PingUrl.java:113)
位于xboxtools.PingUrl.setLinkStatus(PingUrl.java:47)
在xboxtools.PingUrl。(PingUrl.java:28)
在xboxtools.LocaleTab.runLocaleActionPerformed(LocaleTab.java:179)上
在xboxtools.LocaleTab$1$1.run(LocaleTab.java:71)
位于java.lang.Thread.run(未知源)
基本上,我想做的是测试我抓取的链接是否有效。如果不是,请将validURI设置为false,然后继续下一个链接


有什么建议可以帮助我改进这一点吗?

你会得到一个NPE,因为你捕获了一个异常(MalformedURLException),然后继续编写更多代码,就好像什么都没发生一样


您的问题与url验证无关,只是简单的调试。当遇到您不理解的情况时,您应该首先尝试使用适当的调试器单步执行代码。

isValidURI(PingUrl.java:113)
即第113I行,仅当我获得有效URL时,才设置布尔值validURI=true。如果它是假的,我不会对那个URL做任何事情。我知道它为什么会抛出畸形的异常异常。所以你的意思是,如果它抛出错误,即使我没有对代码做任何其他事情,我也必须以某种方式处理它?对不起,我对这有点陌生。啊,请注意,我没有像我想的那样理解它。我没有在创建这个url=newURL(checkUrl);,时出错;。我现在做的是在尝试创建uri之前检查错误。希望这能缓解我遇到的所有问题。谢谢
at java.net.URL.<init>(Unknown Source)
at java.net.URL.<init>(Unknown Source)
at java.net.URL.<init>(Unknown Source)
at xboxtools.PingUrl.isValidURI(PingUrl.java:106)
at xboxtools.PingUrl.setLinkStatus(PingUrl.java:47)
at xboxtools.PingUrl.<init>(PingUrl.java:28)
at xboxtools.LocaleTab.runLocaleActionPerformed(LocaleTab.java:179)
at xboxtools.LocaleTab$1$1.run(LocaleTab.java:71)
at java.lang.Thread.run(Unknown Source)
Exception in thread "Thread-2" java.lang.NullPointerException
at xboxtools.PingUrl.isValidURI(PingUrl.java:113)
at xboxtools.PingUrl.setLinkStatus(PingUrl.java:47)
at xboxtools.PingUrl.<init>(PingUrl.java:28)
at xboxtools.LocaleTab.runLocaleActionPerformed(LocaleTab.java:179)
at xboxtools.LocaleTab$1$1.run(LocaleTab.java:71)
at java.lang.Thread.run(Unknown Source)