我在使用java删除Windows中的文件时遇到一些问题.出于某种原因,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, 0, 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, null, ex);
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
file.delete(),以及在资源管理器中手动尝试拒绝删除仍在使用的文件.但是在Linux中似乎都很好.
我错过了一个关闭()的地方吗?我可以确认首先生成文件的方法是关闭文件,因为我可以在使用file.delete()运行上面的代码之前删除文件
额外信息:上面的代码是名为getFileByteArray(文件文件)的方法的一部分,并且被调用如下:
public byte[] createReport(int id) {
Report report = new Report();
String filename = report.CreateReport(id);
return getFileByteArray(new File(filename));
}
Run Code Online (Sandbox Code Playgroud)
谢谢
更新:我设法通过使用ByteArrayOutputStream将文件千字节读取到字节数组来解决问题
作为下面提到的海报,Java中存在一个已知错误,即Windows存在文件映射问题.
mha*_*ler 16
这是Windows上Java中已知的Bug,请参阅Bug#4715154
Sun评估了问题,并通过以下解释关闭了错误:
我们无法解决这个问题.Windows不允许删除映射文件.一旦我们修复垃圾收集器以更快地解除分配直接缓冲区(参见4469299),这个问题应该有所改善,但除此之外我们无能为力.
| 归档时间: |
|
| 查看次数: |
15923 次 |
| 最近记录: |