Разница между 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() возвращает отрицательное число в очень большой файловой системе