Разница между getFreespace() и getUsableSpace файла

Я не мог указать точную разницу между getFreeSpace() и getUsableSpace() методом класса File. Когда я запускаю следующий код, получаю тот же o/p.

Class Start {
    public static void main(String [] args) {
        File myfile = new File("C:\\html\abc.txt");
        myfile.createNewFile();
        Systyem.out.println("free space"+myfile.getFreeSpace()+"usable space"+myfile.getUsableSpace());")
    }
}

O/P -

свободное пространство445074731008 полезное пространство445074731008

Может ли кто-нибудь сказать мне, что такое точная разница?

Ответ 1

Метод java.io.File.getFreeSpace() возвращает число нераспределенных байтов в разделе, названном этим абстрактным именем пути. Возвращенное количество нераспределенных байтов не является гарантией. Количество нераспределенных байтов, вероятно, будет точным сразу после этого вызова и неточно будет выполняться любыми внешними операциями ввода-вывода.

Метод java.io.File.getUsableSpace() возвращает количество байтов, доступных этой виртуальной машине, в секционированном названии по этому абстрактному имени. Этот метод обычно обеспечивает более точную оценку того, сколько новых данных действительно может быть записано, поскольку этот метод проверяет разрешения на запись и другие ограничения операционной системы.

Ответ 2

Разница довольно четко указана в Javadoc двух методов:

getFreeSpace():

Возвращает количество нераспределенных байтов в разделе, названном этим абстрактным путем. [...]

getUsableSpace():

Возвращает количество байтов, доступных этой виртуальной машине в разделе, названном этим абстрактным путем. Когда это возможно, этот метод проверяет разрешения на запись и другие ограничения операционной системы и, следовательно, обычно обеспечивает более точную оценку того, сколько новых данных может быть действительно записано, чем getFreeSpace(). [...]

Однако в большинстве систем оба метода возвращают одно и то же число.

Ответ 3

Javadoc из getUsableSpace() говорит:

Когда это возможно, этот метод проверяет разрешения на запись и другие ограничения операционной системы и, следовательно, обычно обеспечивает более точную оценку того, сколько новых данных может быть действительно записано, чем getFreeSpace().


Поэтому мы должны выбрать getUsableSpace в большинстве случаев.


Обновить:

Обратите внимание, что ниже сообщается об ошибке, на очень большом диске размер пространства может превышать пределы типа long и возвращать отрицательное значение:

JDK-8179320: File getUsableSpace() возвращает отрицательное число в очень большой файловой системе