2016-10-15 3 views
0

다음은 코드입니다. 나는 한 번만 닫기를 호출하여 바로하고 있나? 그것을 reinstantiate 경우다시 인스턴스화하는 경우 FileInputStream을 여러 번 닫아야합니까?

public class SeatTest extends TestCase { 
    FileInputStream inputStream; 
    ArrayList<File> fileNames = new ArrayList<>(); 

    @SuppressWarnings("unchecked") 
    @Override 
    protected void setUp() throws Exception { 
     File dir = new File("./data/test/seat_layouts"); 
     fileNames = new ArrayList<File>(Arrays.asList(dir.listFiles())); 
    } 

    @Test 
    public void testParse() throws IOException { 
     for (File file : fileNames) { 
      inputStream = new FileInputStream(file); 
      String everyThing = IOUtils.toString(inputStream, "UTF-8"); 
      //do something 
     } 
    } 

    @Override 
    protected void tearDown() throws Exception { 
     if (inputStream != null) { 
      inputStream.close(); 
     } 
    } 


} 
+0

도전적으로 종료해야합니다. – BDR

답변

3

은 내가 FileInputStream에 여러 번 닫아야합니다.

예 .... 일종의.

FileInputStream의 각 인스턴스를 닫아야합니다. 그렇지 않으면 파일 설명자가 누출 될 위험이 있습니다. 개체를 "다시 인스턴스화"할 때마다 새 인스턴스를 만들고 각 인스턴스를 닫아야합니다. 자동 try-with-resource 리소스를 닫을 것이다

@Test 
public void testParse() throws IOException { 
    for (File file : fileNames) { 
     try (FileInputStream inputStream = new FileInputStream(file)) { 
      String everyThing = IOUtils.toString(inputStream, "UTF-8"); 
      //do something 
     } 
    } 
} 

참고 예

(즉 inputStream).

이렇게하면 해체 코드가 필요하지 않습니다.