Java访问大文件

Ham*_*aya 5 java file-io file random-access

我正在寻找一种有效的方法来创建一个大小未知但可以从mb到gb的文件,并随机填充其内容.我可以写入前200个字节而不是跳到结尾并写入最后200个字节并移到中间并写入那里.是RandomAccessFile有效的这样做还是有什么其它的方法更适合这样的工作?

Jon*_*eet 10

是的,使用RandomAccessFile- 这就是它的用途.你可以使用a FileChannel,但我会先做RandomAccessFile- 它可能更简单.

请注意,在编写结束部分后,您将无法在文件的"中间插入":我不知道任何支持该文件系统的文件系统.在编写最后一节之前,你需要知道完整的大小,基本上.另一种方法是顺序写入,记住最后一位直到结束.

如果您可以向我们提供有关您需要做什么的更多信息(以及何时获得有关尺寸的信息),我们可以为您提供更多帮助.

编辑:要创建具有特定大小的文件,您可以seek()通过结束然后写入数据:

import java.io.*;

public class Test
{
    // Just for the sake of a simple test program!
    public static void main(String[] args) throws Exception
    {
        RandomAccessFile file = new RandomAccessFile("file.dat", "rw");

        file.seek(100);
        file.write(0);
        file.close();
    }
}
Run Code Online (Sandbox Code Playgroud)

退出之后,file.dat将长101个字节.(注意,通常你会使用try/finally等)

编辑:作为评论中提到的coobird,setLength()也将扩展文件 - 但如果你给出一个小于当前大小的长度,它也会截断文件.鉴于您对基本上编写种子数据的评论,我怀疑寻找和写作正是您想要的行为.当你收到一个块时,只需找到正确的位置,写出来,文件将在需要时自行扩展.