Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Create file with given size in Java

Tags:

java

file

Is there an efficient way to create a file with a given size in Java?

In C it can be done with ftruncate (see that answer).

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…

like image 702
Benedikt Waldvogel Avatar asked Oct 28 '08 23:10

Benedikt Waldvogel


People also ask

How do you declare a file size in Java?

Java get file size using File classJava File length() method returns the file size in bytes. The return value is unspecified if this file denotes a directory.

How can we get the size of a specific file in Java?

In Java, we can use Files. size(path) to get the size of a file in bytes.

How do you create a file in Java?

java File file = new File("JavaFile. java"); We then use the createNewFile() method of the File class to create new file to the specified path.


1 Answers

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.

The following program

import java.io.*;  class Test {      public static void main(String args[]) throws Exception {            RandomAccessFile f = new RandomAccessFile("t", "rw");            f.setLength(1024 * 1024 * 1024);      } } 

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 

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.

like image 65
Diomidis Spinellis Avatar answered Oct 01 '22 06:10

Diomidis Spinellis