Создайте файл с данным размером в Java

Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:

TypeA objA;

. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.

См. Также этот пример:

String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
47
задан Community 23 May 2017 в 11:33
поделиться

2 ответа

Создайте новое 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

, в то время как на машине Соляриса это будет использовать функцию 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

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

94
ответ дан demongolem 26 November 2019 в 19:34
поделиться

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

4
ответ дан Greg Hewgill 26 November 2019 в 19:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: