У меня возникли проблемы с удалением файла в 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, 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;
}
file.delete(), а также попытка вручную в проводнике Explorer отказывается удалить файл, поскольку он все еще используется. В Linux все выглядит хорошо.
Мне не хватает close() где-то? Я могу подтвердить, что метод, который делает файл в первую очередь, закрывает файл, так как я могу удалить файл перед запуском вышеуказанного кода, используя file.delete()
Дополнительная информация:. Вышеприведенный код является частью метода getFileByteArray (Файл файла) и вызывается вот так:
public byte[] createReport(int id) {
Report report = new Report();
String filename = report.CreateReport(id);
return getFileByteArray(new File(filename));
}
Спасибо
Обновление: Мне удалось исправить эту проблему, прочитав файл килобайт на килобайт в байтовый массив, используя ByteArrayOutputStream
В качестве плаката, упомянутого ниже, в Java существует известная ошибка, поскольку в Windows возникают проблемы с сопоставлением файлов.