Метод length() класса File в Java

Java File Java File


File.length()находится в Javajava.io.Fileраспространённый метод класса, используемый для получения размера файла (в байтах). Этот метод возвращаетlongзначение типа, представляющее длину указанного файла в байтах.

Синтаксис метода

public long length()

Возвращаемое значение

Возвращает размер файла в байтах. Если файл не существует или является каталогом, возвращает0L。


Сценарии использования

length()Этот метод особенно полезен в следующих случаях:

  1. Проверка соответствия размера файла требованиям
  2. Отслеживание изменений размера файла
  3. Расчёт использования дискового пространства
  4. Отображение прогресса при загрузке/скачивании файла

Пример базового использования

Пример 1: Получение размера файла

Пример

import java.io.File;

public class FileLengthExample {
    public static void main(String[] args) {
        File file = new File("example.txt");
       
        if (file.exists()) {
            long fileSize = file.length();
            System.out.println("Размер файла: " + fileSize + " bytes");
        } else {
            System.out.println("Файл не существует");
        }
    }
}

Объяснение кода

  1. СоздайтеFileобъект, указывающий на целевой файл
  2. Проверить, существует ли файл
  3. Если он существует, вызватьlength()метод для получения размера файла
  4. Вывести информацию о размере файла

Примечания

1. Когда файл не существует

Если файл не существует,length()метод возвращает0вместо выброса исключения. Поэтому лучше проверить, существует ли файл, перед его вызовом:

Пример

if (file.exists()) {
    long size = file.length();
    // Обработка размера файла
} else {
    // Логика обработки несуществующего файла
}

2. Когда это каталог

Для каталогов,length()метод также возвращает0. Если нужно получить размер каталога, необходимо рекурсивно вычислить размеры всех файлов в каталоге.

3. Символические ссылки

Если файл является символической ссылкой,length()возвращаемое значение — это размер фактического файла, на который указывает ссылка.

4. Обработка больших файлов

Посколькуlength()возвращаемое значение имеетlongтип, оно может обрабатывать файлы размером до 2^63-1 байт (около 8EB), что достаточно для большинства сценариев.


Продвинутое использование

Пример 2: Форматирование размера файла

Пример

import java.io.File;

public class FileSizeFormatter {
    public static void main(String[] args) {
        File file = new File("largefile.zip");
        long size = file.length();
       
        System.out.println("Исходный размер: " + size + " bytes");
        System.out.println("Форматированный размер: " + formatFileSize(size));
    }
   
    public static String formatFileSize(long size) {
        if (size < 1024) {
            return size + " B";
        }
        int exp = (int) (Math.log(size) / Math.log(1024));
        char unit = "KMGTPE".charAt(exp-1);
        return String.format("%.1f %sB", size / Math.pow(1024, exp), unit);
    }
}

Пример вывода

原始大小: 1500000 字节
格式化大小: 1.4 MB

Соображения производительности

File.length()Вызов метода является легковесным, поскольку он только запрашивает метаданные файловой системы и фактически не читает содержимое файла. Однако следует обратить внимание на следующие случаи:

  1. Сетевая файловая система: доступ к метаданным в удалённой файловой системе может иметь задержку
  2. Частые вызовы: если вам нужно часто получать размеры файлов, рассмотрите кэширование результатов
  3. Мониторинг в реальном времени: для сценариев, где нужно отслеживать изменения размера файла в реальном времени, возможно, потребуется комбинироватьWatchServiceиспользовать

ЧАВО

Вопрос 1: почему вызов length() для каталога возвращает 0?

Ответ: В большинстве файловых систем каталог сам по себе не занимает место для хранения (или занимает фиксированное небольшое пространство). Метод `length()` спроектирован так, чтобы возвращать 0 для каталогов.

Вопрос 2: блокирует ли метод length()?

Ответ: Обычно нет, если только не выполняется доступ к сетевой файловой системе с плохими сетевыми условиями.

Вопрос 3: как получить общий размер каталога?

Ответ: Вам нужно рекурсивно обойти все файлы в каталоге и просуммировать их значения `length()`.

Итог

File.length()Это простой, но практичный метод получения информации о размере файла. При его использовании нужно обращать внимание на крайние случаи, такие как: существует ли файл и является ли он каталогом. В сочетании с другими методами файловых операций можно создать мощный функционал обработки файлов.

Java File Java File

Другие расширения