Skip to content

Does commons-io’s FileUtils.readFileToByteArray close the newly created stream?

I’m creating a program that produce checksums for each files in directory. I’m using FileUtils.readFileToByteArray which internally creates a new FileInputStream. The problem is I didn’t find where the stream is closed and wondering about a possible memory leak.

So I’m asking: does this method close the stream after reading it?



Short answer: yes, it closes the stream.

Slightly longer answer: Let’s look at the code:

try (InputStream in = openInputStream(file)) {
    final long fileLength = file.length();
    // file.length() may return 0 for system-dependent entities, treat 0 as unknown length - see IO-453
    return fileLength > 0 ? IOUtils.toByteArray(in, fileLength) : IOUtils.toByteArray(in);

That you see here is the try-with resource syntax. Any AutoClosable opened in the try‘s parentheses (in this case, a FileInputStream) will be implicitly closed when the try block terminates, whether it terminated normally or by returning, throwing an exception, etc.