質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
排他制御

排他制御とは、特定のファイル・データへのアクセスや更新を制御することです。特にファイルやデータベースへ書き込みを行う際、データの整合性を保つため別のプログラムによる書き込みを一時的に制御することを指します。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

2回答

1382閲覧

Javaのファイルロックについて

退会済みユーザー

退会済みユーザー

総合スコア0

排他制御

排他制御とは、特定のファイル・データへのアクセスや更新を制御することです。特にファイルやデータベースへ書き込みを行う際、データの整合性を保つため別のプログラムによる書き込みを一時的に制御することを指します。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2022/01/19 07:22

編集2022/01/19 07:23

お世話になります。
日頃javaを学んでいまして、自主的に制作に励んでいます。
ある日、javaで値をテキストファイルに出力するプログラム、テキストファイルから値を取得するプログラムをそれぞれ作成し、出力されてる値をリアルタイムで取得したいと考えました。
そこに条件として出力している間は他が書き込みをできないように、読み取り専用の状態にしようと考え、制作していました。
内容としてFileChannelクラスやFileクラスを使用して書き込み時に読み取り専用にしてうまくいくと考えたのですが、どうにもうまくいかないみたいで。。。
エラー内容としては読み取り専用に変更したら例外なく今後書き込むことはダメです。といった内容でアクセス制御(排他制御)なら問題なく書き込めるのですが、リアルタイムで読み取るという動きは達成できそうにありません。
私はファイルロックの動きについて変更を命令するプログラム(今回の書き込みプログラム)での動きは例外的に優先されるものだと考えていたのですが、間違いなのでしょうか。
変更を命令するプログラムでファイルに書き込みながら、外部からは読み取り専用の状態にする方法が実現可能でしたらご教授いただけますと幸いです。
説明下手で申し訳ございませんが、よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

変更を命令するプログラムでファイルに書き込みながら、外部からは読み取り専用の状態にする方法が実現可能でしたら

Files#setAttribute()をつかってみては。

ファイルを編集しているあいだなのか、プログラムを起動しているあいだなのかは考えてもらうとして、使い始めにFiles.setAttribute(path, "dos:readonly", true)、書き込みたくなったらFiles.setAttribute(path, "dos:readonly", false)として、書き込んで、書き込み終えたらFiles.setAttribute(path, "dos:readonly", true)にする。使い終わったらFiles.setAttribute(path, "dos:readonly", false)
上記はDOSのはなしなので、これを、Linuxなら、Macなら、と実装すればいいのでは。

投稿2022/01/20 01:14

shiketa

総合スコア3971

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/01/20 02:01

ご回答ありがとうございます。 読み取り専用かどうかをうまく切り替えながら、実装していくという事ですね。 参考にさせていただきます。 ご意見ありがとうございました!
shiketa

2022/01/21 02:23

読み取り専用にできるかどうか、という問いだったので案を提示しましたが、わたしが実装するとしたらこのようにはしない。readonlyにしたままアプリケーションが死んでしまったらどうするか、とか考えるから。 ファイルを開くときにファイルのタイムスタンプを確保し、ファイルに書き込む前にタイムスタンプを確認する。タイムスタンプが変わっていたら、上書きするか利用者に確認する。
退会済みユーザー

退会済みユーザー

2022/01/21 06:36

コメントありがとうございます。 そうですね。不測の事態も考えつつ対応も考えて制作に励んでいこうかと思います。 参考にさせていただきます。貴重なご意見ありがとうございました。
guest

0

ファイルロックの動きについて変更を命令するプログラム(今回の書き込みプログラム)での動きは例外的に優先されるものだと考えていた

そのような忖度機能は私は聞いたことがありません。
コンピュータがプログラムを解析してそのような優先順位を付けていたら、ハッキング等とても防げるものでは無いと思いますが。

ロックはほぼ紳士協定のようなもので、無視されれば効果は無いも同然と思います。
読むほうも書くほうもご自身で作成されるのであればお互いの機能を調整して実装するしかありませんが、それは機能・作者次第であり、「こうすればOK」というものはありません。

投稿2022/01/19 08:36

jimbe

総合スコア12648

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/01/20 01:27 編集

ご回答ありがとうございます。 やはり、そう都合のいいものではなかったのですね。認識を改めさせていただきます。 ご提案頂いた通り、それぞれの機能を調整して理想に近い状態を試行錯誤して実装してみよう、と思います。 ご意見ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問