1

我有一个循环遍历很多 URL。我的问题是程序正在写出终端中每个 url 的内容,我只想忽略损坏的 url。如何确定 URL 是否指代某物?

我是否被迫使用正在抛出的异常 FileNotFoundException?因为它也会影响程序的其他部分,所以我想确保如果 url 被破坏,主 while 循环直接跳转到下一次迭代。异常是由我正在使用的方法引发的(在我无法更改的类中),我该如何处理?

这是我的循环(简化):

while(!queue.isEmpty()) {
    URL thisURL = (URL)queue.poll();
    String page = Customurlclass.openURL(thisURL); // return a string containing the page that the url is refering to.
    System.out.println(page);
    // Some other things is also happening here, an I don't want them to happen if the url is broken.
}

所以 openURL() 正在捕获 FileNotFoundException 并且终端中打印了很多东西,我只想忽略它们,我该怎么做?

4

1 回答 1

1

要验证您的字符串是否为有效 URL,您可以使用 Apache commons-validator URLValidator 类,如下所示:

String[] schemes = {"http","https"}; // DEFAULT schemes = "http", "https", "ftp"
UrlValidator urlValidator = new UrlValidator(schemes);
if (urlValidator.isValid("ftp://foo.bar.com/")) {
   System.out.println("url is valid");
} else {
   System.out.println("url is invalid");
}

或者,即使您喜欢不使用它,Apache common-validator您也可以使用以下内容:

try {
    URL url = new URL("http://www.yoursite.com/");
    URLConnection conn = url.openConnection();
    conn.connect();
} catch (MalformedURLException e) {
    // the URL is not in a valid form
} catch (IOException e) {
    // the connection couldn't be established
}
于 2013-11-02T09:00:44.787 回答