Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как получить расширение и размер файла

Короткий ответ

Возьмите имя файла и всё, что после последней точки:

String extension(Path path) {
    String name = path.getFileName().toString();
    int dot = name.lastIndexOf('.');
    return dot > 0 ? name.substring(dot + 1) : "";
}
 
void main() {
    IO.println(extension(Path.of("docs", "report.final.pdf")));
    IO.println(extension(Path.of("Makefile")));
    IO.println("[" + extension(Path.of(".gitignore")) + "]");
}

Результат:

pdf
 
[]

Условие dot > 0 не считает расширением имя скрытого файла вроде .gitignore.

Имя без расширения

Возьмите часть до последней точки:

void main() {
    String name = Path.of("photos/cat.jpeg").getFileName().toString();
    int dot = name.lastIndexOf('.');
 
    IO.println(dot > 0 ? name.substring(0, dot) : name);
}

Результат:

cat

Размер файла

Files.size() возвращает размер в байтах:

void main() throws IOException {
    Path file = Path.of("data.bin");
    Files.write(file, new byte[2500]);
 
    IO.println(Files.size(file));
}

Результат:

2500

Читаемый размер

Делите на 1024, пока число не станет меньше 1024:

String readableSize(long bytes) {
    String[] units = {"B", "KB", "MB", "GB", "TB"};
    double size = bytes;
    int unit = 0;
    while (size >= 1024 && unit < units.length - 1) {
        size /= 1024;
        unit++;
    }
    return String.format(Locale.US, "%.1f %s", size, units[unit]);
}
 
void main() {
    IO.println(readableSize(500));
    IO.println(readableSize(2500));
    IO.println(readableSize(3_221_225_472L));
}

Результат:

500.0 B
2.4 KB
3.0 GB

Частая ошибка

Искать первую точку через indexOf(). Для archive.tar.gz получится tar.gz, а для пути с точкой в имени папки — мусор:

void main() {
    String path = "v1.2/readme";
    IO.println(path.substring(path.indexOf('.') + 1));
}

Результат:

2/readme

Берите имя файла через getFileName() и ищите последнюю точку.

Функции из этого ответа

  • Path.of() — Создаёт объект Path — путь к файлу или папке.
  • String.lastIndexOf() — Находит позицию последнего вхождения символа или подстроки.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.