gpt4 book ai didi

java - 将文件作为 RandomAccessFile 打开并映射为 MappedByteBuffer 后重命名

转载 作者:太空宇宙 更新时间:2023-11-04 06:21:19 25 4
gpt4 key购买 nike

我正在尝试重命名之前用作 RandomAccessFile 的文件。

当我尝试重命名文件时,我在 renameTo 调用中收到错误。当我使用 Windows 应用程序进程监视器时,我发现没有重命名调用。

我怎么可能无法重命名作为 RandomAccessFile 打开的文件?

以下代码将复制我遇到的问题:

File f = new File("testfile.txt");

FileChannel fc = new RandomAccessFile(f, "rw").getChannel();
MappedByteBuffer mem = fc.map(FileChannel.MapMode.READ_WRITE, 0, 8);
mem.position(0);
fc.close();

File oldfile = new File("testfile.txt");
File newName = new File("testfile2.txt");
Boolean success = oldfile.renameTo(newName);
success = f.renameTo(newName);

最佳答案

文件仍处于打开状态。您必须先从内存中取消文件的映射,然后才能重命名它。您可以在这里找到解决方案:How to unmap a file from memory mapped using FileChannel in java?

例如(此方法可能很危险):

public static void unmap(MappedByteBuffer buffer)
{
sun.misc.Cleaner cleaner = ((DirectBuffer) buffer).cleaner();
cleaner.clean();
}

关于java - 将文件作为 RandomAccessFile 打开并映射为 MappedByteBuffer 后重命名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27388202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com