最近、ダウンローダ asynctask にファイルロックを追加しました。
FileOutputStream file = new FileOutputStream(_outFile);
file.getChannel().lock();
ダウンロード完了後、file.close()
ロックを解除します。
呼び出された 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();
}
}
残念ながら、FileOutputStream が作成されると、ファイルが切り捨てられる (0 バイト) と読みます。
追加するように設定しましたが、ロックが有効になっていないようです。すべてロックが解除されているようです (完全にダウンロードされています)。
現在ファイルに書き込みロックが適用されているかどうかを確認する別の方法はありますか、またはここで間違った方法を使用していますか? また、ADB ターミナルまたは Eclipse からファイルロックをデバッグする方法はありますか?