我可以用Java写5GB文件的结尾吗?

我可以用Java写5GB文件的结尾吗?,java,file-io,Java,File Io,我可以用Java写5GB文件的结尾吗?这个问题是在我的办公室里提出来的,没有人知道答案是什么。是的。看看这个链接文件 也就是说,打开文件,然后将位置设置为文件的末尾。从那里开始写作 告诉我们它是如何进行的。这应该可以很容易地使用一个。类似于以下的方法应该可以工作: String filename; RandomAccessFile myFile = new RandomAccessFile(filename, "rw"); // Set write pointer to the end o

我可以用Java写5GB文件的结尾吗?这个问题是在我的办公室里提出来的,没有人知道答案是什么。

是的。看看这个链接文件

也就是说,打开文件,然后将位置设置为文件的末尾。从那里开始写作


告诉我们它是如何进行的。

这应该可以很容易地使用一个。类似于以下的方法应该可以工作:

String filename;

RandomAccessFile myFile = new RandomAccessFile(filename, "rw");

// Set write pointer to the end of the file
myFile.seek(myFile.length());

// Write to end of file here

5GB?我想知道操作系统是否是一个更大的问题,但这是值得怀疑的

理论上,您可以在追加模式下打开文件

OutputStream in = new java.io.FileOutputStream(fileName, true);
并写入,直到文件系统填满


有关字符数据,请参阅。

如果您只是想附加到文件,请查看

FileWriter(File file, boolean append) 
类中的构造函数


抱歉,我手边没有5GB的文件可供测试。:)

实际上,这取决于底层文件系统以及该平台上的JVM如何实现文件流。因为,如果一个文件大于5GB,你就不能用32位操作系统打开整个文件,然后直接写入,因为有43亿个限制(32^2)


因此,答案很快就会是,是的,这是可能的,如果Java正确处理文件并且文件系统是一个好的:)

是的,32^2只有1024。2^32是4294967296。我有一个32位操作系统(Win XP),我可以打开文件并使用C#查找大于5 GB的文件中的任何位置。FileStream.Seek需要一个长整数,2^64。不,这与32位内存限制没有任何关系。对不起,我是说2^32。我的朋友,这不是真正的内存限制,而是CPU的限制。不过,可以模拟32位以上的数据。与许多年前一样,当float不存在时:)for(int i=0;它应该可以很快为您获得一个5gb文件:dd if=/dev/zero of=foobar count=5242880 bs=1024或对于NTFS:fsutil文件createnew 5gb.bin 5000000000