Есть ли способ надежно «выделить» (зарезервировать) пространство на жестком диске с помощью «стандартной» Java (J2SE 5 или более поздней версии)?
Возьмем, например, случай многопоточного приложения, выполняющегося в потокепул, куда каждый поток скачивает файлы.Как приложение может убедиться, что его загрузка не будет прервана в результате исчерпания дискового пространства?
По крайней мере, если оно заранее знает размер загружаемого файла, может ли оно выполнить какое-то«Резервирование», которое гарантировало бы загрузку файла, независимо от того, что делают другие потоки?
(В StackOverflow есть аналогичный вопрос , но он не обсуждает многопоточность и также использует NIO.)
РЕДАКТИРОВАТЬ: После некоторого дополнительного тестирования решение, предложенное по аналогичному вопросу, похоже, не работает, поскольку можно установить ЛЮБУЮ допустимую длину с помощью предлагаемого подхода RandomAccessFile, независимо отбазовое пространство на жестком диске.Например, на разделе, имеющем всего несколько гигабайт, я смог создать файлы TB (террабайт!) По своему усмотрению.
Решение было бы достаточно, если бы сообщал метод getFreeSpace () класса Fileуменьшенный объем доступного пространства каждый раз, когда создается новый файл, но на самом деле это не так, что подтверждает нулевую длину, которую на практике эти файлы, по-видимому, имеют.
Это, по крайней мере, результаты, которые яна виртуальной машине CentOS 5.6, запущенной в VMWare Player 4.0.0.