У меня есть функция, которая должна поместить пару ключ-значение в карту, хранящуюся в файле. Если файл не существует, я должен создать его. Я пытаюсь заблокировать файл, когда работаю с ним с помощью блокировки файлов (). Но когда я пытаюсь написать в него (внутри заблокированного раздела), я получаю исключение ввода-вывода:
Подавлено: java.io.IOException: процесс не может получить доступ к файлу, потому что другой процесс заблокировал часть файла
Я, наверное, не использую права lock (). Вот моя функция:
private void createDataSet(String key, String data) throws IOException, ClassNotFoundException{
final String path = (fileName);
// 1. Check if file exists
// 2. If file exists, write/override key/value.
Path nPath = Paths.get(path);
HashMap<String, List<String>> map = new HashMap<String, List<String>>();
// createFile is atomic, no need to check if exists.
try(FileChannel fileChannel = FileChannel.open(nPath,StandardOpenOption.WRITE,StandardOpenOption.APPEND
, StandardOpenOption.CREATE);
FileOutputStream fos= new FileOutputStream(path, false);
ObjectOutputStream oos= new ObjectOutputStream(fos);
){
FileLock lock = fileChannel.lock();
if(fileChannel.size()==4){
map.put(key, values);
oos.writeObject(map);
}else{
ObjectInputStream objectIn = new ObjectInputStream(Channels.newInputStream(fileChannel));
Object obj = objectIn.readObject();
map = (HashMap<String, List<String>>) obj;
map.put(key, values);
// In this row exception being throwed:
oos.writeObject(map);
}
oos.close();
fos.close();
lock.release();
}
return;