JavaのFileクラスを使うと、ファイルの書込みをできなくしたり、読み込みを禁止したりできる。
使うのは、setWritable、setReadableメソッドだ。このページではそれぞれの実行方法をサンプルプログラムも使ってご紹介しよう。
参考にしていただければと思う。
目次
Javaのファイルの書込禁止や読込禁止の方法
Fileクラスには、ファイルの書込みを禁止したり、読み込みを禁止したりする操作が用意されている。どんな時に必要なのだろうか。一人だけで、ファイルを読み書きしている場合には、それほど必要を感じないかもしれない。しかし、二人以上でファイルを共有している場合はどうだろう。ファイルに大切な情報が保存されているとしよう。そのような情報は、内容によってはそれが書き変えられたくない。さらに、読まれたくないということもある。
このような時に、そのファイルの持ち主は、ファイルのメソッドを呼び出して、書き込みの禁止や読み込みの禁止を行う。こうすれば、ファイルを修正中に他のユーザがファイルを読んだり書き込んだりすることはできない。
ただし、システムによっては、書き込み禁止と読み込み禁止がサポートされていない場合もあるので、注意してほしい。
読み込み禁止と書き込み禁止のためのメソッド
ファイルを読み込み禁止にしたり、書き込み禁止にしたりするために用意されているメソッドの詳細を見てみよう。
問い合わせ
canRead()
戻り値の型 |
public boolean |
内容 |
アプリケーションがこの抽象パス名によって示されたファイルを読むことができるかどうかをテストする。
いくつかのプラットフォームにおいては、読み込みできないファイルの読み込みを許可する特別な権利を持つJavaのバーチャルマシーンを起動することが可能かもしれない。その結果、このメソッドは、ファイルが読む許可を持っていないとしても、trueを戻すかもしれない。
戻り値:true - この抽象パス名によって記されたファイルが存在し、アプリケーションによって読み込める場合に限り。false -そうでなければfalseである。
例外:SecurityException - もしセキュリティーマネジャーが存在し、そのSecurityManager.checkRead(java.lang.String)メソッドがファイルを読み込むためのアクセスを拒否するならば。 |
canWrite()
戻り値の型 |
public Boolean |
内容 |
内容: アプリケーションが、この抽象パス名によって示されたファイルを修正できるかどうかをテストする。 いくつかのプラットフォームにおいては、読み込み専用とマークされていても、ファイルの修正を許可する特別な権利を持つJavaバーチャルマシーンを起動することが可能かもしれない。その結果、このメソッドは、たとえファイルが読み込み専用であるとしても、trueを戻すかもしれない。
戻り値: true - ファイルシステムが、実際にこの抽象パス名によって示されたファイルを含み、アプリケーションがファイルを書くことを許可された場合に限り。false - そうでなければfalseである。
例外: SecurityException-もしセキュリティーマネジャーが存在し、そのSecurityManager.checkWrite(java.lang.String)メソッドがファイルに書き込むためのアクセスを拒否するならば。 |
書き込み禁止
setWritable(boolean writable)
戻り値の型 |
public Boolean |
内容 |
この抽象パス名のために、所有者の書き込み許可を設定する便利なメソッドである。 いくつかのプラットフォームにおいては、書き込み操作を許可しないファイルの修正を許可する特別な権利を持つJavaバーチャルマシーンを起動することが可能かもしれない。file.setWritable(arg) 形式ファイルのこのメソッドの起動は、ちょうどfile.setWritable(arg, true)の起動と同じように振る舞う。
引数:writable - もしtrueならば、オペレーションを書き込むことを許可するためのアクセス許可を設定する。もしfalseならば、書き込む操作を許可しない。
戻り値:true – 操作が成功した場合に限り。もしユーザが、この抽象パス名のアクセス許可を変える許可を持たないならば、操作は失敗する。
例外:SecurityException-もしセキュリティーマネジャーが存在し、そのSecurityManager.checkWrite(java.lang.String)メソッドがファイルを書くためのアクセスを拒否するならば。 |
setReadOnly()
戻り値の型 |
public boolean |
内容 |
読み込み専用操作を許可するために、この抽象パス名によって名付けられたファイルもしくはディレクトリをマークする。 このメソッドを起動した後、ファイルもしくはディレクトリは、それが削除されるか書き込みアクセスの許可がマークされるまで変更できない。いくつかのプラットフォームにおいては、読み込み専用にマークされたファイルの修正を許可する特別な権限を持つJavaのバーチャルマシーンを起動することが可能かもしれない。読み取り専用のファイル、もしくはディレクトリが消されるかどうかは、基本システムに依存する。
戻り値:true - オペレーションが成功した場合に限り。False - そうでなければfalseである。
例外:SecurityException-もしセキュリティーマネジャーが存在し、そのSecurityManager.checkWrite(java.lang.String)メソッドが、名付けられたファイルへの書き込みアクセスを否定するならば。
以降:1.2 |
読み込み禁止
setReadable(boolean readable)
戻り値の型 |
public boolean |
内容 |
この抽象パス名のために、所有者の読み込み許可を設定する便利なメソッドである。 いくつかのプラットフォームにおいては、読み込み禁止としてマークしたファイルの読み込みを許可する特別な権利を持つJavaのバーチャルマシーンを起動することが可能かもしれない。setReadable(arg) 形式ファイルのこのメソッドの起動は、ちょうどfile.setReadable (arg, true)の起動と同じように振る舞う。
引数:readable - もしtrueならば、読み込み操作を許可するためのアクセス許可を設定する。もしfalseならば、読み込み操作を許可しない。
戻り値:true – 操作が成功した場合に限り。もしユーザが、この抽象パス名のアクセス許可を変える許可を持っていないならば、この操作は失敗する。もし、読み込みがfalseで、基本ファイルシステムが読み込み許可を実装していないならば、操作は失敗する。
例外:SecurityException-もしセキュリティーマネジャーが存在し、そのSecurityManager.checkWrite(java.lang.String)メソッドがファイルを書くためのアクセスを拒否するならば。 |
ファイルの読み込みと書き込みの状態を調べるサンプルプログラム
それでは実際にサンプルプログラムを確認してみよう。
このプログラムは、ファイルの読み込みと書き込みがどのような状態にあるかを調べて、表示している。次のセクションのサンプルプログラムでは、読み込みと書き込みの禁止の設定を行っている。
- FileRead.txt :読み込み許可と禁止をテストするためのファイル
- FileWrite.txt :書き込み許可と禁止をテストするためのファイル
- FileReadOnly.txt:読み込み専用をテストするためのファイル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
import java.io.File; public class FileCanReadWrite { public static void main(String[] args) { String pathnameRead = "C:\\temp\\FileRead.txt";//[1] File fileRead = new File(pathnameRead);//[2] printFileAttribute(fileRead);//[3] String pathnameWrite = "C:\\temp\\FileWrite.txt";//[4] File fileWrite = new File(pathnameWrite);//[5] printFileAttribute(fileWrite);//[6] String pathnameReadOnly = "C:\\temp\\FileReadOnly.txt";//[7] File fileReadOnly = new File(pathnameReadOnly);//[8] printFileAttribute(fileReadOnly);//[9] } private static void printFileAttribute(File file) {//[10] if (!file.exists()) {//[11] System.out.println("[12]ファイル:[" + file.getPath() + "]は存在しません"); } String resultMessage = "禁止";//[13] if (file.canWrite()) {//[14] resultMessage = "可能";//[15] } System.out.println("[16]ファイル:[" + file.getPath() + "]は書込" + resultMessage + "です"); resultMessage = "禁止";//[17] if (file.canRead()) {//[18] resultMessage = "可能";//[19] } System.out.println("[20]ファイル:[" + file.getPath() + "]は読込" + resultMessage + "です"); } } |
実行結果
続くセクションで、読み込みと書き込み禁止を行った後で、各ファイルの状態を調べるために、このサンプルプログラムを使用している。こちらを見てほしい。
サンプルプログラムの説明
それでは簡単にプログラムの解説をしてゆこう。
- [1] 文字列pathnameReadにディレクトリのパスと名前を設定する。
- [2] FileクラスからpathnameReadをパス名に持つfileReadインスタンスを生成する。
- [3] printFileAttribute()メソッドを呼び出す。
- [4] 文字列pathnameWriteにディレクトリのパスと名前を設定する。
- [5] FileクラスからpathnameWriteをパス名に持つfileWriteインスタンスを生成する。
- [6] printFileAttribute()メソッドを呼び出す。
- [7] 文字列pathnameReadOnlyにディレクトリのパスと名前を設定する。
- [8] FileクラスからpathnameReadOnlyをパス名に持つfileReaOnlyインスタンスを生成する。
- [9] printFileAttribute()メソッドを呼び出す。
- [10] printFileAttribute()メソッドを定義する。
- [11] ファイルの存在を調べる。
- [12] ファイルが存在しないことを表示する。
- [13] resultMessageに「禁止」を設定する。
- [14] ファイルが書き込み可能かを調べる。
- [15] resultMessageに「可能」を設定する。
- [16] ファイルの書き込みが可能かどうかを表示する
- [17] resultMessageに「禁止」を設定する。
- [18] ファイルが書き込み可能かを調べる。
- [19] resultMessageに「可能」を設定する。
- [20] ファイルの読み込みが可能かどうかを表示する
禁止を行うサンプルプログラム
このプログラムは、3つのファイルを以下のように設定する。
- FileRead.txt :読み込みを禁止する
- FileWrite.txt :書き込み禁止する
- FileReadOnly.txt:読み込み専用に設定する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
import java.io.File; public class FileNotAllowToReadWrite { public static void main(String[] args) { String pathnameRead = "C:\\temp\\FileRead.txt";//[1] File fileRead = new File(pathnameRead);//[2] String resultMessage = "失敗しました";//[3] if(fileRead.setReadable(false)) {//[4] resultMessage = "成功しました";//[5] } System.out.println("[6]ファイル:[" + pathnameRead + "の読込禁止に" + resultMessage); String pathnameWrite = "C:\\temp\\FileWrite.txt";//[7] File fileWrite = new File(pathnameWrite);//[8] resultMessage = "失敗しました";//[9] if(fileWrite.setWritable(false)) {//[10] resultMessage = "成功しました";//[11] } System.out.println("[12]ファイル:[" + pathnameWrite + "の書込禁止に" + resultMessage); String pathnameReadOnly = "C:\\temp\\FileReadOnly.txt";//[13] File fileReadOnly = new File(pathnameReadOnly);//[14] resultMessage = "失敗しました";//[15] if(fileReadOnly.setReadOnly()) {//[16] resultMessage = "成功しました";//[17] } System.out.println("[18]ファイル:[" + pathnameReadOnly + "の読み取り専用に" + resultMessage); } } |
実行結果
Windowsでは、書き込み禁止はサポートされている。しかし、読み込み禁止はサポートされていな。それで、ファイルのプロパティを見ると、読み取り専用というオプションがあるが、読み込み禁止と書き込み禁止が独立したオプションとしてプロパティにない。
Windows上でJavaのサンプルプログラムを実行する前と後のプロパティを実行結果と共に示すので、読み取り専用にチェックが入るのを確認してほしい。
禁止を実行する前のプロパティ:
禁止を行うサンプルプログラムを実行する。
1 2 3 |
[6]ファイル:[C:\temp\FileRead.txt]の読込禁止に失敗しました [12]ファイル:[C:\temp\FileWrite.txt]の書込禁止に成功しました [18]ファイル:[C:\temp\FileReadOnly.txt]の読み取り専用に成功しました |
読み込み書き込みの状態を調べるサンプルプログラムを実行する
1 2 3 4 5 6 |
[16]ファイル:[C:\temp\FileRead.txt]は書込可能です [20]ファイル:[C:\temp\FileRead.txt]は読込可能です [16]ファイル:[C:\temp\FileWrite.txt]は書込禁止です [20]ファイル:[C:\temp\FileWrite.txt]は読込可能です [16]ファイル:[C:\temp\FileReadOnly.txt]は書込禁止です [20]ファイル:[C:\temp\FileReadOnly.txt]は読込可能です |
禁止を実行した後のプロパティ:
サンプルプログラムの説明
それでは簡単にプログラムの解説をしてゆこう。
- [1] 文字列pathnameReadにディレクトリのパスと名前を設定する。
- [2] FileクラスからpathnameReadをパス名に持つfileReadインスタンスを生成する。
- [3] resultMessage に「失敗しました」を設定する。
- [4] 読み込み禁止:setReadable()を呼び出す。
- [5] resultMessage に「成功しました」を設定する。
- [6] 禁止設定の結果を表示する。
- [7] 文字列pathnameWriteにディレクトリのパスと名前を設定する。
- [8] FileクラスからpathnameWriteをパス名に持つfileReadインスタンスを生成する。
- [9] resultMessage に「失敗しました」を設定する。
- [10] 書き込み禁止:setWritable()を呼び出す。
- [11] resultMessage に「成功しました」を設定する。
- [12] 禁止設定の結果を表示する。
- [13] 文字列pathnameReadOnlyにディレクトリのパスと名前を設定する。
- [14] FileクラスからpathnameReadOnlyをパス名に持つfileReadインスタンスを生成する。
- [15] resultMessage に「失敗しました」を設定する。
- [16] 読み込み専用:setReadOnly()を呼び出す。
- [17] resultMessage に「成功しました」を設定する。
- [18] 読み込み専用設定の結果を表示する。
許可を行うサンプルプログラム
このプログラムは、3つのファイルを以下のように設定する。
- FileRead.txt :読み込みを許可する
- FileWrite.txt :書き込み許可する
- FileReadOnly.txt:書き込み許可する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
import java.io.File; public class FileAllowToReadWrite { public static void main(String[] args) { String pathnameRead = "C:\\temp\\FileRead.txt";//[1] File fileRead = new File(pathnameRead);//[2] String resultMessage = "失敗しました";//[3] if(fileRead.setReadable(true)) {//[4] resultMessage = "成功しました";//[5] } System.out.println("[6]ファイル:[" + pathnameRead + "の読込許可に" + resultMessage); String pathnameWrite = "C:\\temp\\FileWrite.txt";//[7] File fileWrite = new File(pathnameWrite);//[8] resultMessage = "失敗しました";//[9] if(fileWrite.setWritable(true)) {//[10] resultMessage = "成功しました";//[11] } System.out.println("[12]ファイル:[" + pathnameWrite + "の書込許可に" + resultMessage); String pathnameReadOnly = "C:\\temp\\FileReadOnly.txt";//[13] File fileReadOnly = new File(pathnameReadOnly);//[14] resultMessage = "失敗しました";//[15] if(fileReadOnly.setWritable(true)) {//[16 resultMessage = "成功しました";//[17] } System.out.println("[18]ファイル:[" + pathnameReadOnly + "の書込許可に" + resultMessage); } } |
実行結果
禁止を行うサンプルプログラムを実行する。
1 2 3 |
[6]ファイル:[C:\temp\FileRead.txt]の読込許可に成功しました [12]ファイル:[C:\temp\FileWrite.txt]の書込許可に成功しました [18]ファイル:[C:\temp\FileReadOnly.txt]の書込許可に成功しました |
読み込み書き込みの状態を調べるサンプルプログラムを実行する
1 2 3 4 5 6 |
[16]ファイル:[C:\temp\FileRead.txt]は書込可能です [20]ファイル:[C:\temp\FileRead.txt]は読込可能です [16]ファイル:[C:\temp\FileWrite.txt]は書込可能です [20]ファイル:[C:\temp\FileWrite.txt]は読込可能です [16]ファイル:[C:\temp\FileReadOnly.txt]は書込可能です [20]ファイル:[C:\temp\FileReadOnly.txt]は読込可能です |
サンプルプログラムの説明
それでは簡単にプログラムの解説をしてゆこう。
- [1] 文字列pathnameReadにディレクトリのパスと名前を設定する。
- [2] FileクラスからpathnameReadをパス名に持つfileReadインスタンスを生成する。
- [3] resultMessage に「失敗しました」を設定する。
- [4] 読み込み許可:setReadable()を呼び出す。
- [5] resultMessage に「成功しました」を設定する。
- [6] 許可設定の結果を表示する。
- [7] 文字列pathnameWriteにディレクトリのパスと名前を設定する。
- [8] FileクラスからpathnameWriteをパス名に持つfileReadインスタンスを生成する。
- [9] resultMessage に「失敗しました」を設定する。
- [10] 書き込み許可:setWritable()を呼び出す。
- [11] resultMessage に「成功しました」を設定する。
- [12] 許可設定の結果を表示する。
- [13] 文字列pathnameReadOnlyにディレクトリのパスと名前を設定する。
- [14] FileクラスからpathnameReadOnlyをパス名に持つfileReadインスタンスを生成する。
- [15] resultMessage に「失敗しました」を設定する。
- [16] 書き込み許可:setWritable ()を呼び出す。
- [17] resultMessage に「成功しました」を設定する。
- [18] 禁止設定の結果を表示する。
まとめ
このページでは、ファイルの書込みや読み込みなどのパーミションをどうやって設定するのかについてお伝えした。
JavaのFileクラスを使うことでこれらは実現できる。ぜひサンプルプログラムを動かして、トライしてみていただきたい。