I just announced the new Spring Boot 2 material, coming in REST With Spring:

>> CHECK OUT THE COURSE

1. Overview

In this quick tutorial, we’ll learn how to get the size of a file in Java – using Java 7, the new Java 8 and Apache Common IO.

Finally – we will also get a human readable representation of the file size.

2. Standard Java IO

Let’s start with a simple example of calculating the size of a file – using the File.length() method:

private long getFileSize(File file) {
    long length = file.length();
    return length;
}

We can test our implementation relatively simply:

@Test
public void whenGetFileSize_thenCorrect() {
    long expectedSize = 12607;
 
    File imageFile = new File("src/test/resources/image.jpg");
    long size = getFileSize(imageFile);
 
    assertEquals(expectedSize, size);
}

Note that, by default, the file sizes is calculated in bytes.

3. With Java NIO

Next – let’s see how to use the NIO library to get the size of the file.

In the following example, we’ll use the FileChannel.size() API to get the size of a file in bytes:

@Test
public void whenGetFileSizeUsingNioApi_thenCorrect() throws IOException {
    long expectedSize = 12607;
 
    Path imageFilePath = Paths.get("src/test/resources/image.jpg");
    FileChannel imageFileChannel = FileChannel.open(imageFilePath);

    long imageFileSize = imageFileChannel.size();
    assertEquals(expectedSize, imageFileSize);
}

4. With Apache Commons IO

Next – let’s see how to get the file size using Apache Commons IO. In the following example – we simply use FileUtils.sizeOf() to get the file size:

@Test
public void whenGetFileSizeUsingApacheCommonsIO_thenCorrect() {
    long expectedSize = 12607;
 
    File imageFile = new File("src/test/resources/image.jpg");
    long size = FileUtils.sizeOf(imageFile);
 
    assertEquals(expectedSize, size);
}

Note that, for security restricted files, FileUtils.sizeOf() will report the size as zero.

5. Human Readable Size

Finally – let’s see how to get a more user readable representation of the file size using Apache Commons IO – not just a size in bytes:

@Test
public void whenGetReadableFileSize_thenCorrect() {
    File imageFile = new File("src/test/resources/image.jpg");
    long size = getFileSize(imageFile);
 
    assertEquals("12 KB", FileUtils.byteCountToDisplaySize(size));
}

6. Conclusion

In this tutorial, we illustrated examples of using Java and Apache Commons IO to calculate the size of a file in the file system.

The implementation of these examples can be found in the GitHub project – this is a Maven-based project, so it should be easy to import and run as it is.

I just announced the new Spring Boot 2 material, coming in REST With Spring:

>> CHECK OUT THE LESSONS