-1

我需要在下载之前检查地址上的文件是否存在。它工作正常,直到它到达一些不存在的文件。try-catch 块不能很好地解决它。当我打开连接(InputStream)时,它会尝试下载它,但失败并转到“catch”。但它不会关闭它的自我。下次我用相同的 IP 调用该方法时,它会崩溃并 sais - 同一 IP 上的连接太多 (2)

概括:

直到它到达错误的地址,它工作正常

当它到达错误的地址时,它会去“catch”,但不会关闭它自己,它不能再连接了

public boolean exists(String URLName) throws IOException {
    boolean result = false;
    URL url = new URL(URLName);
    try {
        input = url.openStream();
        System.out.println("SUCCESS");
        result = true;
        input.close();
    } catch (Exception e) {
        input.close();
        System.out.println("FAIL");
    }
    return result;
}

我尝试了各种程序,但如果没有一些特殊的技巧,它就行不通。请问,有人可以帮我解决这个问题吗?

4

3 回答 3

2

我将使用该finally块来关闭我InputStream并重构代码以URLConnection代替使用。

例子:

public boolean exists(String URLName) throws IOException {
    boolean result = false;
    URLConnection connection = null;
    InputStream input = null;
    try {
    connection = new URL(URLName).openConnection();
        input = connection.getInputStream();
        System.out.println("SUCCESS");
        result = true;
    } catch (Exception e) {
        System.out.println("FAIL");
    } finally {
        if (input != null) {
            input.close();
        }
    }
    return result;
}
于 2013-08-19T07:52:37.517 回答
1

为什么不直接使用 finally 块并关闭其中的所有连接... ??

于 2013-08-19T07:49:22.347 回答
0

尝试使用新版本的 apache HttpClient http://hc.apache.org/httpcomponents-client-ga/index.html,代码如下:

HttpClient httpClient = new HttpClient();
 GetMethod get = new GetMethod(url);
      try{
httpClient.executeMethod(get);


        return get.getResponseBodyAsString();


    } catch (HttpException clP_e) {

        throw new IOException(clP_e);

    } finally {

        get.releaseConnection();

    }
于 2013-08-19T07:55:47.380 回答