Как получить расширение и размер файла
Короткий ответ
Возьмите имя файла и всё, что после последней точки:
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() — Находит позицию последнего вхождения символа или подстроки.