在Windows中发布Java文件锁

前端之家收集整理的这篇文章主要介绍了在Windows中发布Java文件锁前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在 Windows中使用java删除文件有一些问题.由于某种原因,java正在锁定我的文件,我不知道为什么.这是我的代码
private byte[] getFileByteArray(File file) {
    try {
        RandomAccessFile raf = new RandomAccessFile(file,"r");
        FileChannel channel = raf.getChannel();
        try {

            ByteBuffer buffer = channel.map(FileChannel.MapMode.READ_ONLY,channel.size());
            byte[] bt = new byte[buffer.remaining()];
            buffer.get(bt);
            channel.close();
            raf.close();
            file.delete();
            return bt;

        } catch (Exception ex) {
            //Logger.getLogger(ConnectionImpl.class.getName()).log(Level.SEVERE,null,ex);
            System.out.println(ex.toString());
        }

    } catch (FileNotFoundException ex) {
        Logger.getLogger(ConnectionImpl.class.getName()).log(Level.SEVERE,ex);
    }
    return null;
}

file.delete()以及在资源管理器中手动尝试拒绝删除文件,因为它仍在使用中.在Linux中似乎都很好.

我错过了()somehwhere吗?我可以确认首先使文件方法关闭文件,因为我可以使用file.delete()运行上述代码之前删除文件,

额外信息:上面的代码是一个名为getFileByteArray(File file)的方法的一部分,正在被调用

public byte[] createReport(int id) {

    Report report = new Report();
    String filename = report.CreateReport(id);
    return getFileByteArray(new File(filename));
}

谢谢

更新:我设法通过使用ByteArrayOutputStream读取千字节千字节到字节数组中来解决这个问题

作为下面提到的海报,Java中有一个已知的错误,因为Windows有文件映射问题.

这是一个已知的Java在Windows上的Bug,请参阅 Bug #4715154

Sun评估了这个问题,并通过以下解释来关闭了这个bug:

We cannot fix this. Windows does not allow a mapped file to be deleted. This problem should be ameliorated somewhat once we fix our garbage collectors to deallocate direct buffers more promptly (see 4469299),but otherwise there’s nothing we can do about this.

原文链接:https://www.f2er.com/windows/369462.html

猜你在找的Windows相关文章