0

次のコードを書いてあり、うまくいきます。 try-with-resourceステートメントからリソースを閉じる方法

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(); 
     } 
    } 

} 

は最近、私は文が正しく実行後に自動的にリソースを閉じ以降 java 7から try-with-resourceと呼ばれる新機能があることが分かりました。どのように私は try-with-resourceステートメントを使用するように、次のコードを変換できます。私は少ししましたが、私はそれにすべてのリソースを追加する方法と混同しています。ここでは、コード

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(); 
    } 




} 

}

あなたはそれがtry-with-resourcesステートメントを使用するように、このコードを変換するために私を助けてくださいです。事前に感謝

+0

回答があれば、質問を終了してください。 – Beri

答えて

0

リソースを区切るために区切り記号として ';'を使用してください。これで、リソースは宣言の終わりの順序で閉じられます。BufferedReader、 InputStreamReader、CloseableHttpResponse。

また、以下の例のようにメソッドからクローズ可能なオブジェクトを返して、try-catchブロックに割り当てる前にそれらのオブジェクトを変更することもできます。

このチュートリアルでは、undestand multiple try-catch-resourcesを見ることができます。

public void closeResources(){ 
     try(CloseableHttpResponse httpResponse = createCloseableHttpResponse(); 
     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 | IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

private CloseableHttpResponse createCloseableHttpResponse() throws IOException{ 
    CloseableHttpClient httpclient = HttpClients.createDefault(); 
    HttpGet httpGet= new HttpGet(""); 
    httpGet.addHeader("Authorization","Bearer "+getToken()); 
    return httpclient.execute(httpGet); 
} 
+0

'HttpGet'クラスをインスタンス化し、sendindトークンなどのヘッダーを設定します。 –

+0

閉じることができるオブジェクトを返すファクトリメソッドを作成するだけです。コードが更新されました、あなたは一見をすることができます – Beri

関連する問題