Tamanho do arquivo em Java

Tamanho do arquivo em Java

1. Visão geral

Neste tutorial rápido, aprenderemos como obter osize of a file in Java - usando o Java 7, o novo Java 8 e o Apache Common IO.

Finalmente - também obteremos uma representação legível por humanos do tamanho do arquivo.

2. Java IO padrão

Vamos começar com um exemplo simples de cálculo do tamanho de um arquivo - usando o métodoFile.length():

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

Podemos testar nossa implementação de maneira relativamente simples:

@Test
public void whenGetFileSize_thenCorrect() {
    long expectedSize = 12607;

    File imageFile = new File("src/test/resources/image.jpg");
    long size = getFileSize(imageFile);

    assertEquals(expectedSize, size);
}

Observe que, por padrão, os tamanhos dos arquivos são calculados em bytes.

3. Com Java NIO

A seguir, veja como usar a biblioteca NIO para obter o tamanho do arquivo.

No exemplo a seguir, usaremos a APIFileChannel.size() para obter o tamanho de um arquivo em 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. Com Apache Commons IO

A seguir - vamos ver como obter o tamanho do arquivo usandoApache Commons IO. No exemplo a seguir - simplesmente usamosFileUtils.sizeOf() para obter o tamanho do arquivo:

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

Observe que, para arquivos de restrição de segurança,FileUtils.sizeOf() relatará o tamanho como zero.

5. Tamanho legível por humanos

Finalmente - vamos ver como obter uma representação mais legível do usuário do tamanho do arquivo usandoApache Commons IO - não apenas um tamanho em 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. Conclusão

Neste tutorial, ilustramos exemplos de uso de Java e Apache Commons IO para calcular o tamanho de um arquivo no sistema de arquivos.

A implementação desses exemplos pode ser encontrada emthe GitHub project - este é um projeto baseado em Maven, portanto, deve ser fácil de importar e executar como está.