Создать файл с заданным размером в Java
Есть ли эффективный способ создания файла с заданным размером в Java?
В C это можно сделать с помощью ftruncate (см. Этот ответ ).
Большинство людей просто пишут n фиктивных байтов в файл, но должен быть более быстрый способ. Я думаю о ftruncate, а также о разреженных файлах …
- Как переместить / переименовать файл из внутреннего хранилища приложений во внешнее хранилище на Android?
- Каков наилучший способ создания уникального и короткого имени файла в Java
- HowTo извлекает MimeType из байта
- Каким будет самый быстрый способ конкатенации трех файлов на C #?
- Как добавить значение тайм-аута при использовании Runtime.exec () Java?
- Пакетные файлы: как читать файл?
- Как получить имя файла без расширения на Java?
- Загрузка изображений с использованием Node.js, Express и Mongoose
- Android; Проверьте, существует ли файл без создания нового
- Чтение Eclipse stdin (System.in) из файла
- Каков наилучший способ вернуть случайную строку в текстовый файл с помощью C?
- открыть файл в эксклюзивном режиме в C #
- определить, является ли файл изображением
Создайте новый RandomAccessFile и вызовите метод setLength, указав желаемую длину файла. В основе реализации JRE следует использовать наиболее эффективный метод, ansible в вашей среде.
Следующая программа
import java.io.*; class Test { public static void main(String args[]) throws Exception { RandomAccessFile f = new RandomAccessFile("t", "rw"); f.setLength(1024 * 1024 * 1024); } }
на машине Linux будет выделять пространство, используя ftruncate (2)
6070 open("t", O_RDWR|O_CREAT, 0666) = 4 6070 fstat(4, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0 6070 lseek(4, 0, SEEK_CUR) = 0 6070 ftruncate(4, 1073741824) = 0
в то время как на машине Solaris будет использоваться функция F_FREESP64 системного вызова fcntl (2).
/2: open64("t", O_RDWR|O_CREAT, 0666) = 14 /2: fstat64(14, 0xFE4FF810) = 0 /2: llseek(14, 0, SEEK_CUR) = 0 /2: fcntl(14, F_FREESP64, 0xFE4FF998) = 0
В обоих случаях это приведет к созданию разреженного файла.
Вы можете открыть файл для записи, искать смещение (n-1) и написать один байт. ОС автоматически расширит файл до необходимого количества байтов.