5

我正在寻找一种有效的方法来创建一个大小未知但范围可以从 mb 到 gb 并随机填充其内容的文件。我可能会写前 200 个字节而不是跳到最后并写最后 200 个字节并移动到中间并在那里写。这样做是否RandomAccessFile有效,或者有没有更适合这种工作的替代方案?

4

3 回答 3

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();
    }
}

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

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

于 2009-06-23T15:02:56.180 回答
2

RandomAccessFile 应该这样做

于 2010-01-04T03:54:00.413 回答
1

我猜 RandomAccessFile 可以解决这个问题

于 2009-06-23T15:03:32.777 回答