2016-10-15 3 views
0

以下はコードです。私は一度閉じるだけでそれをやっていますか?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)。

このようにすると、ティアダウンコードは不要です。

関連する問題