4

最近、ダウンローダ 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 からファイルロックをデバッグする方法はありますか?

4

2 に答える 2

2

私の最初の考えは、javadocsごとに追加するために開くことです

test = new FileOutputStream(files[i], true); // the true specifies for append
于 2012-10-04T03:04:53.220 に答える
2

これはどれもうまくいきません。Javadoc を確認してください。ロックは、個々のスレッドではなく、プロセス全体、つまり JVM のために保持されます。

于 2012-10-04T03:10:10.190 に答える