Как будто вы пытаетесь получить доступ к объекту, который является null
. Рассмотрим ниже пример:
TypeA objA;
. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException
, что имеет смысл.
См. Также этот пример:
String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
Создайте новое 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
В обоих случаях это приведет к созданию редкого файла.
Можно открыть файл для записи, стремиться сместить (n-1) и записать единственный байт. ОС автоматически расширит файл до желаемого числа байтов.