나는 최근에 내 다운로더 AsyncTask를에 filelocks을 추가했다.파일을 자르지 않고 FileLock을 확인하는 방법은 무엇입니까?</p> <pre><code>FileOutputStream file = new FileOutputStream(_outFile); file.getChannel().lock(); </code></pre> <p>및 다운로드가 완료된 후, <code>file.close()</code> 잠금을 해제 :
호출 된 BroadcastReceiver (다른 스레드)에서 파일을 검토하여 다운로드 된 파일과 잠겨있는 파일을 확인해야합니다. 나는 설정된 tryLock 시작 :
for (int i=0; i<files.length; i++) {
try {
System.out.print((files[i]).getName());
test = new FileOutputStream(files[i]);
FileLock lock = test.getChannel().tryLock();
if (lock != null) {
lock.release();
//Not a partial download. Do stuff.
}
} catch (Exception e) {
e.printStackTrace();
} finally {
test.close();
}
}
쓰기 잠금이 파일에 적용되는지 확인하는 다른 방법이 있습니까 현재, 아니면 여기에 잘못된 방법을 사용하고 있습니까? 또한, ADB 터미널이나 Eclipse에서 파일 잠금을 디버깅하는 방법이 있습니까?
난 이해가 안돼, 나는 * 내 애플 리케이션의 프로세스를 대신하여 자물쇠를 개최 * 싶어요. – NoBugs
스레드가 자신을 위해서만 잠그고 싶은 이유가 무엇인지 잘 모르겠지만 그것이 무엇을하고있는 것처럼 보입니다. 파일을 사용중인 것으로 표시하는 더 나은 방법을 알고 있습니까? – NoBugs
@NoBugs 아니요. 스레드 A가 잠금을 보유하고 스레드 B가 스레드 A가 잠금을 해제 할 때까지 잠금을 얻지 못하게하려고합니다. 중요한 점은 tryLock()은 프로세스가 전체적으로 이미 잠금을 가지고 있기 때문에 항상 성공한다는 것입니다. 귀하의 코드는 실패, 즉 null을 반환합니다. – EJP