Перейти к основному содержимому

Размер файла в Java

· 2 мин. чтения

1. Обзор

В этом кратком руководстве мы узнаем, как получить размер файла в Java , используя Java 7, новую Java 8 и Apache Common IO.

Наконец, мы также получим удобочитаемое представление размера файла.

2. Стандартный ввод-вывод Java

Начнем с простого примера вычисления размера файла — с помощью метода File.length() : ``

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

Мы можем относительно просто протестировать нашу реализацию:

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

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

assertEquals(expectedSize, size);
}

Обратите внимание, что по умолчанию размер файла рассчитывается в байтах.

3. С Java NIO

Далее — давайте посмотрим, как использовать библиотеку NIO для получения размера файла.

В следующем примере мы будем использовать API FileChannel.size() для получения размера файла в байтах:

@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. С Apache Commons IO

Далее — давайте посмотрим, как получить размер файла с помощью Apache Commons IO . В следующем примере мы просто используем FileUtils.sizeOf() , чтобы получить размер файла:

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

Обратите внимание, что для файлов, ограниченных безопасностью, FileUtils.sizeOf() сообщит размер как нулевой.

5. Удобочитаемый размер

Наконец, давайте посмотрим, как получить более удобочитаемое представление размера файла с помощью Apache Commons IO , а не только размер в байтах:

@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. Заключение

В этом руководстве мы проиллюстрировали примеры использования Java и Apache Commons IO для расчета размера файла в файловой системе.

Реализацию этих примеров можно найти в проекте GitHub — это проект на основе Maven, поэтому его легко импортировать и запускать как есть.