Kasun Siyambalapitiya
Kasun Siyambalapitiya

Reputation: 4403

how to close the resources from try-with-resource statement

I have written the following code and it works well.

  public void  callingTheAPI() throws IOException{

    BufferedReader bufferedReader= null;
    CloseableHttpClient httpclient= null;
    CloseableHttpResponse httpResponse= null;

    try {
        httpclient = HttpClients.createDefault();
        HttpGet httpGet= new HttpGet(URL);
        httpGet.addHeader("Authorization","Bearer "+getToken());

        httpResponse=httpclient.execute(httpGet);
        int responseCode= httpResponse.getStatusLine().getStatusCode();
        System.out.println(responseCode);

        bufferedReader= new BufferedReader(new InputStreamReader (httpResponse.getEntity().getContent()));

        StringBuilder stringBuilder= new StringBuilder();
        String line;
        while((line=bufferedReader.readLine())!=null){
            stringBuilder.append(line);

        }

        System.out.println(stringBuilder.toString());
    } 

    catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } 
    catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    finally{

        if (bufferedReader != null){
            bufferedReader.close();
        }

        if(httpResponse != null){
            httpResponse.close();
        }
        if (httpclient != null){
            httpclient.close();
        }
    }

}

Recently I found out that there is a new feature called try-with-resource from java 7 onwards which closes the resources automatically after the statement run correctly. How can I convert the following code to use try-with-resource statement. I did a little bit but I am confuse with how to add all the resources to it. Here is the code

public void closeResources(){



    CloseableHttpClient httpclient = HttpClients.createDefault();
    HttpGet httpGet= new HttpGet(URL);
    httpGet.addHeader("Authorization","Bearer "+getToken());

    CloseableHttpResponse httpResponse=httpclient.execute(httpGet);
    int responseCode= httpResponse.getStatusLine().getStatusCode();
    System.out.println(responseCode);


    try(BufferedReader bufferedReader= new BufferedReader(new InputStreamReader (httpResponse.getEntity().getContent()))){
        StringBuilder stringBuilder= new StringBuilder();
        String line;
        while((line=bufferedReader.readLine())!=null){
            stringBuilder.append(line);

        }

        System.out.println(stringBuilder.toString()); 


    } catch (UnsupportedOperationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } 

    catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }




}

}

Can you please help me to convert this code, so that it uses try-with-resources statements. Thanks in advance

Upvotes: 0

Views: 10349

Answers (1)

Beri
Beri

Reputation: 11620

Use ';' as delimiter to separate your resources. Now the resources will close in oposite order of their declaration, so: BufferedReader, InputStreamReader, CloseableHttpResponse.

You can look at this tutorial to undestand multiple try-catch-resources.

public void closeResources(){
    // some code
    try(CloseableHttpResponse httpResponse=httpclient.execute(httpGet); 
    InputStreamReader reader = new InputStreamReader(httpResponse.getEntity().getContent()); 
    BufferedReader bufferedReader= new BufferedReader(reader)){
        StringBuilder stringBuilder= new StringBuilder();
        String line;
        while((line=bufferedReader.readLine())!=null){
            stringBuilder.append(line);

        }

        System.out.println(stringBuilder.toString());


    } catch (UnsupportedOperationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

Upvotes: 0

Related Questions