代码之家  ›  专栏  ›  技术社区  ›  Benedikt Waldvogel assylias

在爪哇中创建具有给定大小的文件

  •  39
  • Benedikt Waldvogel assylias  · 技术社区  · 16 年前

    有没有 有效率的 在Java中创建具有给定大小的文件的方法?

    在C中可以用 ftruncate (见 that answer )

    大多数人只会写 n 在文件中使用虚拟字节,但必须有更快的方法。我在想 截断的 而且 Sparse files 艾斯

    2 回复  |  直到 8 年前
        1
  •  83
  •   demongolem    8 年前

    创建新的 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机器上,将使用ftrunate(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
    

    在这两种情况下,这都将导致创建稀疏文件。

        2
  •  4
  •   Greg Hewgill    16 年前

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