用Java创建给定大小的文件 [英] Create file with given size in Java
问题描述
是否有一种有效的方法来在 Java 中创建具有给定大小的文件?
Is there an efficient way to create a file with a given size in Java?
在 C 中,它可以通过 ftruncate 完成(参见 那个答案).
In C it can be done with ftruncate (see that answer).
大多数人只会将 n 个虚拟字节写入文件,但必须有更快的方法.我在考虑 ftruncate 和 稀疏文件...
Most people would just write n dummy bytes into the file, but there must be a faster way. I'm thinking of ftruncate and also of Sparse files…
推荐答案
创建一个新的 RandomAccessFile 并调用 setLength 方法,指定所需的文件长度.底层 JRE 实现应使用您环境中可用的最有效方法.
Create a new RandomAccessFile and call the setLength method, specifying the desired file length. The underlying JRE implementation should use the most efficient method available in your environment.
下面的程序
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) 分配空间
on a Linux machine will allocate the space using the 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_FREEP64 函数.
while on a Solaris machine it will use the the F_FREESP64 function of the fcntl(2) system call.
/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
在这两种情况下,这都会导致创建一个稀疏文件.
In both cases this will result in the creation of a sparse file.
这篇关于用Java创建给定大小的文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!