使用RandomAccessFile将数据写入文件

时间:2014-03-14 07:56:16

标签: java randomaccessfile

我使用RandomAccessFile写入文件。数据(字段)以固定字段长度存储,例如,每个字段将分配16个字节的空间。我通过使用seek()将指针放置到适当的位置来写入内容。当我覆盖某些字段时出现问题,即,如果" Bangalore"如果用"德里"结果是" Delhilore"。如何删除"班加罗尔"完全在写作之前"德里"?

如果value是我要写的字符串,length是固定字段长度(16)

        byte[] b=new byte[length];

        b=value.getBytes();

        try 
        {
            database.seek(offset);
            database.write(b);


        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();

        }

1 个答案:

答案 0 :(得分:0)

您需要覆盖整个16个字节。如何做到这一点的一个例子是:

ByteBuffer buf = ByteBuffer.allocate(16);
buf.put(value.getBytes("UTF-8"));
database.seek(offset);
database.write(buf.array());

这将在记录内容之后写入尾随零。

但请注意,对于您编写的每条记录,这涉及两个系统调用,如果您使用该文件的内存映射,则可以避免这些调用。请参阅FileChannel.map()