Возвращает длину файла, обозначенного этим абстрактным путем. Возвращаемое значение не указано, если этот путь указывает каталог.
Для второй части вопроса, прямо из File javadocs:
getUsableSpace() Возвращает количество байтов, доступных этой виртуальной машине, в разделе с именем этого абстрактного пути
getTotalSpace() Возвращает размер раздела с именем этого абстрактного пути
getFreeSpace() Возвращает количество нераспределенных байтов в разделе, названном этим абстрактным именем пути
Ответ 2
Попробуй это:
long length = f.length();
Ответ 3
Был быстрый Google. Кажется, чтобы найти размер файла, который вы делаете,
long size = f.length();
Различия между тремя найденными вами методами можно найти здесь
getFreeSpace() и getTotalSpace() довольно понятны, getUsableSpace() кажется пространством, которое может использовать JVM, которое в большинстве случаев будет таким же, как объем свободного места.