在Java中创build给定大小的文件

有没有一种有效的方法来在Java中创build一个给定大小的文件?

在C中可以用ftruncate完成(见答案 )。

大多数人只会在文件中写入n个虚拟字节,但必须有一个更快的方法。 我正在考虑ftruncate和稀疏文件 …

创build一个新的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计算机上则使用fcntl(2)系统调用的F_FREESP64函数。

 /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 

在这两种情况下,这将导致创build一个稀疏文件。

您可以打开文件进行写入,尝试偏移(n-1),然后写入一个字节。 操作系统会自动将文件扩展到所需的字节数。