2011-11-10 13 views
10

サードパーティのJavaアプリケーションによってロックされているログファイルにアクセスしたいとします。ファイルは1日中ロックされ、翌日に解放されます。しかし、私の目的は、明日まで待つことなく、RandomAccessFileを使用して今読むことです(読んでいる間に最後の位置を開始/保存する必要があるため、このクラスを使用する必要があります)。別のアプリケーションによってロックされているログファイルを読み取る

現在、ファイルロック解除ソフトウェアでロックを解除した場合のみ、ログを読み取ることができます。私の目的を達成するためにJavaプログラムで使用できるjar/utilitiesを誰かに提案できますか?
ソフトウェアShadow Copyは、ロックされたファイルをコピーするために、MicrosoftのVSS)を使用して、使用している:あなたは、Microsoftのオペレーティングシステムを使用していると仮定すると、

+3

? http://stackoverflow.com/questions/1555883/locking-and-unlocking-files-using-the-java-api 提供されるソリューションはそれほどエレガントではありませんが、当面有効です。 – darnir

+1

また、ログファイルをロックしているアプリケーションを特定できますか?外部のサードパーティアプリですか?またはあなた自身のコードのいくつかの他の部分?どこか自分のコードであれば、これは助けになるかもしれません。http://www.javaspecialists.eu/archive/Issue190.html – darnir

+1

もう一つの同様の問題があります:http:// stackoverflow。com/questions/5680588/in-java-is-a-way-to-read-a-file-when-other-locked-by-other-thread –

答えて

2

。 Java Runtime Environmentからソフトウェアを使用するか、おそらくでVSS-APIをご利用ください。

私のアプローチはファイルになり、そのコピーを介してコンテンツにアクセスします。欠点は、コピー操作後にファイルが更新されていると古い情報を読んでいる可能性があることです。

しかし、これは私がこのトピックに慣れていないので、これはちょうど推測です。

+0

ファイルが小さい場合にのみ、これは私の目的を解決できると私はあなたに同意しました。しかし、巨大なファイルをコピーすることは3秒ごとに良い考えではありません。なぜ私はファイルの特定の場所にアクセスするためにRandamAccessFileを使用しているのですか? –

+0

@JoeIjam:VSSはcopy-on-writeを使用しているため、少しのヘッダー情報しか書きません。ファイルの内容は、いずれかのファイルに書き込まれるまでコピーされず、変更された領域だけがコピーされます。それでも、これにシャドーコピーを使用すると、過度の過労です。元のプロセスのロックを壊す方が良いですが、それは不愉快です。 –

1

ファイルとフォルダはJavaでロック/アンロックできますが、ロックしたアプリケーション(プログラムしたアプリケーション)のみでロック/ロック解除できます。しかし、他のプロセスで使用されているファイルのロックを解除できるJavaメソッド/クラスはありません。

他の(ネイティブ)ソフトウェアとアプリケーションをバンドルする必要があります。たとえば、Linuxシステム用のシェルスクリプトを作成して実行することができます。 Javaアプリケーションでは、どのOSで実行されているかを検出するので、適切なスクリプト/ソフトウェアを実行できます。

アプリケーションでRWロックが必要な場合は、他の誰もそれを変更する権利がないようにする必要があります。なぜなら、そのシステムを使用しているプロセスを強制終了する必要があるからです。あなたはそのサードパーティのJavaアプリケーション(あなたが必要とする実際にロックされたファイル)のソースコードへのアクセス権を持っている場合は

、そして、あなたは再びそれをロックするためのファイルと承認のロックを解除する要求をlistenするサーバー・サイドを実装可能です。 。

私の意見では、より良いアプローチは、あなたのアプリケーションにあなたのファイルを転送し、あなたが望むことを実行し、中断することなく(目立つべきではない)サードパーティのアプリケーションを実行することができます。あなたはそれを変更する必要がある場合、3番目は待つ必要があります、あなたの変更し、更新されたバージョンを送り返す、3番目は動作し続けます。

1

私はそのような仕事をするための信頼できるツールは見当たりません。私の最初の心は、サーブレットやその他のメカニズムを介してファイルとして公開している間にロックを回避しようとすることです。サーブレット一旦プレーンテキスト(またはストリーム)として、その内容をお届けファイルを読み込み...これ以上のロック競合

あなたの問題に少し似てHTH ジェローム

関連する問題