Создать файл с заданным размером в Java - PullRequest
44 голосов
/ 29 октября 2008

Существует ли эффективный способ создания файла с заданным размером в Java?

В C это можно сделать с помощью ftruncate (см. , который отвечает ).

Большинство людей просто пишут n фиктивных байтов в файл, но должен быть более быстрый путь. Я имею в виду ftruncate , а также разреженных файлов

Ответы [ 2 ]

91 голосов
/ 29 октября 2008

Создайте новый RandomAccessFile и вызовите метод setLength, указав желаемую длину файла. Базовая реализация JRE должна использовать наиболее эффективный метод, доступный в вашей среде.

Следующая программа

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

В обоих случаях это приведет к созданию разреженного файла.

4 голосов
/ 29 октября 2008

Вы можете открыть файл для записи, выполнить поиск смещения (n-1) и записать один байт. ОС автоматически расширит файл до желаемого количества байтов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...