java:OverlappingFileLockException
java :OverlappingFileLockException
我想锁定文件,然后对其进行一些更新,但每次我想进行此操作时,我都会得到:java.nio.channels.overlappingFilelockException,我尝试使用这段代码添加带有此异常的 catch 子句:
catch(OverlappingFilelockException e){
lock.relese();
}
但这对我不起作用。这是我的 java 代码,我应该怎么做才能摆脱这个异常?
File file = new File("C://Users//user//Desktop//conf1.xml");
String content = '';
BufferedReader s;
BufferedWriter w;
RandomAccessFile ini=new RandomAccessFile(file, "rwd");;
FileLock lock= ini.getChannel().tryLock();;
def flowFile1=session.create();
DocumentBuilder dBuilder = null;
Document doc=null;
String start, startDate, endDate, runAs, makeVersion, patch;
try {
String sCurrentLine;
s = new BufferedReader(Channels.newReader(ini.getChannel(), "UTF-8"));
while ((sCurrentLine = s.readLine()) != null) {
content += sCurrentLine;
}
ini.seek(0);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
StreamResult result1 = new StreamResult(bos);
try {
transformer.transform(source, result1);
} catch (TransformerException e) {
e.printStackTrace();
}
byte[] array = bos.toByteArray();
String data = bos.toString();
if (!data.isEmpty()) {
ini.setLength(0);
w = new BufferedWriter(Channels.newWriter(ini.getChannel(), "UTF-8"));
w.write(data);
lock.release();
w.close();
}
}catch (FileNotFoundException e) {
Thread.sleep(5000);
} catch (Exception e) {
e.printStackTrace();
}
finally {
lock.release();
ini.close();
}
OverlappingFilelockException
以大写字母开头。您的 catch
语句无法编译,因为 overlappingFilelockException(小写)未知。更正它,您的异常将按预期被捕获。
很可能会抛出文件锁定异常,因为其他 process/thread 持有该文件的锁。看看这是谁,由锁持有者释放锁,然后重试。
catch (OverlappingFileLockException e) {
lock.release();
}
什么锁?你没有得到锁。你有一个例外。而不是锁。您甚至没有 lock
变量 ,因为它不在范围内。
删除 release()
行。
我想锁定文件,然后对其进行一些更新,但每次我想进行此操作时,我都会得到:java.nio.channels.overlappingFilelockException,我尝试使用这段代码添加带有此异常的 catch 子句:
catch(OverlappingFilelockException e){
lock.relese();
}
但这对我不起作用。这是我的 java 代码,我应该怎么做才能摆脱这个异常?
File file = new File("C://Users//user//Desktop//conf1.xml");
String content = '';
BufferedReader s;
BufferedWriter w;
RandomAccessFile ini=new RandomAccessFile(file, "rwd");;
FileLock lock= ini.getChannel().tryLock();;
def flowFile1=session.create();
DocumentBuilder dBuilder = null;
Document doc=null;
String start, startDate, endDate, runAs, makeVersion, patch;
try {
String sCurrentLine;
s = new BufferedReader(Channels.newReader(ini.getChannel(), "UTF-8"));
while ((sCurrentLine = s.readLine()) != null) {
content += sCurrentLine;
}
ini.seek(0);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
StreamResult result1 = new StreamResult(bos);
try {
transformer.transform(source, result1);
} catch (TransformerException e) {
e.printStackTrace();
}
byte[] array = bos.toByteArray();
String data = bos.toString();
if (!data.isEmpty()) {
ini.setLength(0);
w = new BufferedWriter(Channels.newWriter(ini.getChannel(), "UTF-8"));
w.write(data);
lock.release();
w.close();
}
}catch (FileNotFoundException e) {
Thread.sleep(5000);
} catch (Exception e) {
e.printStackTrace();
}
finally {
lock.release();
ini.close();
}
OverlappingFilelockException
以大写字母开头。您的 catch
语句无法编译,因为 overlappingFilelockException(小写)未知。更正它,您的异常将按预期被捕获。
很可能会抛出文件锁定异常,因为其他 process/thread 持有该文件的锁。看看这是谁,由锁持有者释放锁,然后重试。
catch (OverlappingFileLockException e) {
lock.release();
}
什么锁?你没有得到锁。你有一个例外。而不是锁。您甚至没有 lock
变量 ,因为它不在范围内。
删除 release()
行。