0

다음 코드를 작성했으며 올바르게 작동합니다. 리소스 사용 시도 문에서 리소스를 닫는 방법

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 문을 사용하려면 다음 코드를 어떻게 변환하면됩니까? 나는 조금했으나 모든 리소스를 추가하는 방법과 혼동합니다. 이 try-with-resources 문을 사용할 수 있도록 여기, 당신이 날이 코드를 변환하는 데 도움을 주시겠습니까 코드

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




} 

}

입니다. 미리 감사드립니다.

+0

답이 있으면 질문을 닫으십시오. – Beri

답변

0

자원을 분리하기 위해 구분 기호로 ';'을 사용하십시오. 이제 리소스는 선언의 잘못된 순서로 닫힙니다. BufferedReader, InputStreamReader, CloseableHttpResponse.

또한 try-catch 블록에 할당하기 전에 수정할 수있는 방법으로 아래 예제와 같은 메서드에서 닫기 가능한 개체를 반환 할 수 있습니다.

try-catch-resources은 undestand로이 자습서를 볼 수 있습니다.

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

관련 문제