Files.size în Java

Returnează mărimea unui fișier în octeți (bytes); literele cu diacritice ocupă câte doi octeți în UTF-8.

Sintaxă
static long size(Path cale) throws IOException

Ce face Files.size

Files.size(cale) dă numărul de octeți ai fișierului, ca long. Dacă fișierul nu există, aruncă NoSuchFileException.

Numărul de octeți nu este același cu numărul de caractere: în UTF-8, literele simple ocupă un octet, iar literele românești ă, â, î, ș, ț ocupă câte doi. Pentru foldere valoarea depinde de sistem și nu înseamnă mărimea conținutului.

Parametri

Parametru Descriere
cale Fișierul măsurat.

Ce returnează

Mărimea în octeți (long).

Exemple

Exemplul 1: Octeți față de caractere

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;

public class Main {
    public static void main(String[] args) throws IOException {
        Path a = Files.writeString(Path.of("fara.txt"), "Iasi");
        Path b = Files.writeString(Path.of("cu.txt"), "Iași");

        System.out.println("Iasi: " + Files.size(a) + " octeți");
        System.out.println("Iași: " + Files.size(b) + " octeți");
    }
}

Rezultat

Iasi: 4 octeți
Iași: 5 octeți

Exemplul 2: Mărimea afișată în KB

Un fișier de 3000 de rânduri a câte 10 octeți (9 cifre + \n) are 30.000 de octeți.

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) throws IOException {
        String continut = IntStream.range(0, 3000)
                .mapToObj(i -> String.format("%09d%n", i))
                .collect(Collectors.joining());
        Path cale = Files.writeString(Path.of("coduri.txt"), continut);

        long octeti = Files.size(cale);
        System.out.println(octeti + " octeți");
        System.out.printf("%.1f KB%n", octeti / 1024.0);
    }
}

Rezultat

30000 octeți
29.3 KB

Greșeli frecvente

  • Folosești Files.size ca număr de caractere. Pentru text cu diacritice cele două diferă.
  • Aduni Files.size pentru un folder ca să afli cât ocupă. Trebuie să aduni mărimile fișierelor din el (cu Files.walk).

Comenzi înrudite

  • Files.getLastModifiedTime: Returnează momentul ultimei modificări a unui fișier, ca FileTime; util pentru a afla care fișier e mai nou.
  • File: Clasa veche pentru căi de fișiere: exists verifică existența, getName dă numele, length mărimea în octeți.
  • Files.walk: Parcurge un folder cu tot ce conține, la orice adâncime, și dă toate căile ca Stream<Path>, începând cu folderul însuși.
  • Files.readString: Citește tot conținutul unui fișier text într-un singur String (implicit în UTF-8).