Fileクラス – エンジニアの入り口 https://eng-entrance.com 「エンジニアの入り口」は、プログラミング入門やエンジニアリング入門の知識が満載の初心者のための勉強サイトです。プログラミングやサーバ、ネットワークの基礎知識や勉強方法を習得できます。 Wed, 10 Jun 2020 01:31:30 +0000 ja hourly 1 https://wordpress.org/?v=5.2.19 【Java】書込禁止と読込禁止の設定方法:setWritable, setReadable https://eng-entrance.com/java-file-setwritable-setreadable https://eng-entrance.com/java-file-setwritable-setreadable#respond Sun, 02 Oct 2016 00:38:53 +0000 http://eng-entrance.com/?p=2893 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:読み込み専用をテストするためのファイル

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:読み込み専用に設定する

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のサンプルプログラムを実行する前と後のプロパティを実行結果と共に示すので、読み取り専用にチェックが入るのを確認してほしい。

禁止を実行する前のプロパティ:

property-not-cheched

禁止を行うサンプルプログラムを実行する。

[6]ファイル:[C:\temp\FileRead.txt]の読込禁止に失敗しました
[12]ファイル:[C:\temp\FileWrite.txt]の書込禁止に成功しました
[18]ファイル:[C:\temp\FileReadOnly.txt]の読み取り専用に成功しました

読み込み書き込みの状態を調べるサンプルプログラムを実行する

[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]は読込可能です

禁止を実行した後のプロパティ:

property-checked

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

  • [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:書き込み許可する

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);
    }
}

実行結果

禁止を行うサンプルプログラムを実行する。

[6]ファイル:[C:\temp\FileRead.txt]の読込許可に成功しました
[12]ファイル:[C:\temp\FileWrite.txt]の書込許可に成功しました
[18]ファイル:[C:\temp\FileReadOnly.txt]の書込許可に成功しました

読み込み書き込みの状態を調べるサンプルプログラムを実行する

[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クラスを使うことでこれらは実現できる。ぜひサンプルプログラムを動かして、トライしてみていただきたい。

]]>
https://eng-entrance.com/java-file-setwritable-setreadable/feed 0
Javaでファイルの存在を確認し削除する方法:existsとdelete https://eng-entrance.com/java-file-exists https://eng-entrance.com/java-file-exists#respond Sat, 01 Oct 2016 01:31:40 +0000 http://eng-entrance.com/?p=2890 Javaでファイルの存在を確認し、削除するにはFileクラスのexistsメソッドとdeleteメソッドを使用する。

このページではexistsとdeleteそれぞれのメソッドの使用方法をサンプルも含めてお伝えした。参考にしていただければと思う。

Javaでファイルの存在確認と削除をする方法

JavaのFileクラスには、目的のファイルが目的の場所にあるのか、ないのかを確認する操作がある。どんな場合にこの操作を使うかというと、単にファイルがあることを確認することに加えて、ファイルを削除するような場合が考えられる。

ファイルの削除の場合、いきなりファイルを削除することもできるが、普通はファイルがあることを確認してから削除する。こうすれば、どんな原因で削除できなかったかがはっきりする。ファイルがないことが原因なのか、それともファイルを他のユーザが使用中で削除できないかなどの理由が明らかになる。

ファイルとディレクトリは違う

Fileクラスは、ファイルもディレクトリも同じメソッドで存在の確認や削除を行うことができる。しかし、削除するときファイルとディレクトリでは違うところがある。ディレクトリは、中身が空の時だけ削除できるという条件がある。この点の詳しい説明やサンプルは、「ファイルかディレクトリかを調べる」を見てほしい。

存在確認と削除のためのメソッド

存在確認と削除のために用意されているメソッドの詳細を見てみよう。

exists()

戻り値の型

public boolean

内容

抽象パス名で示されたファイルかディレクトリが、存在するかどうかをテストする。

 

戻り値:true – 抽象パス名で示されたファイルかディレクトリが存在する場合に限る。false – その他の場合。

 

例外:SecurityException – もし、セキュリティマネジャーが存在して、itsSecurityManager.checkRead(java.lang.String)メソッドがそのファイルかディレクトリの読み込みアクセスを拒否したならば。

delete()

戻り値の型

public Boolean

内容

抽象パス名で示されたファイルかディレクトリを削除する。

 

もし、このパス名がディレクトリを示すなら、そのディレクトリは削除のために空でなければならない。

注意点:ファイルが削除できなかったとき、FileクラスはdeleteメソッドがIOExceptionを投げるよう定義している。これは、ファイルが削除できなかった理由を調べたり、エラー報告したりするために有用です。

 

戻り値:true - もし、ファイルかディレクトリの削除に成功したなら。false – それ以外。

 

例外:SecurityException – もし、セキュリティマネジャーが存在して、SecurityManager.checkDelete(java.lang.String)メソッドがそのファイルかディレクトリの削除アクセスを拒否したならば。

ファイルの存在を確認するサンプルプログラム

それでは実際にサンプルプログラムを確認してみよう。

import java.io.File;

public class FileExists {
    public static void main(String[] args) {
        String pathname = "C:\\temp\\abc.txt";//[1]
        File file = new File(pathname);//[2]

        if (file.exists()) {//[3]
            System.out.println("[4]ファイル:[" + pathname + "]が存在します");
            return;//[5]
        }
        System.out.println("[6]ファイル:[" + pathname + "]が存在しません");
    }
}

実行結果

条件1:ファイル:C:\temp\abc.txtが存在する。
[4]ファイル:[C:\temp\abc.txt]が存在します
条件2:ファイル:C:\temp\abc.txtが存在しない。
[6]ファイル:[C:\temp\abc.txt]が存在しません

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

このプログラムは、ディレクトリ:C:\tempにあるabc.txtというファイルの存在確認をしている。

  • [1] 文字列pathnameにファイルのパスと名前を設定する。
  • [2] Fileクラスからpathnameをパス名に持つfileインスタンスを生成する。
  • [3] existsメソッドにより、ファイルの存在を確認する。
  • [4] ファイルが存在することを示すメッセージを表示する。
  • [5] プログラムを終了する。
  • [6] ファイルが存在しないことを示すメッセージを表示する。

ファイルの存在を確認し削除するサンプルプログラム

import java.io.File;

public class FileExistsAndDelete {
    public static void main(String[] args) {
        String pathname = "C:\\temp\\abc.txt";//[1]
        File file = new File(pathname);//[2]

        if (!file.exists()) {//[3]
            System.out.println("[4]ファイル:[" + pathname + "]が存在しません");
            return;//[5]
        }
        if (file.delete()) {//[6]
            System.out.println("[7]ファイル:[" + pathname + "]の削除に成功しました");
            return;//[8]
        }
        System.out.println("[9]ファイル:[" + pathname + "]の削除に失敗しました");
    }
}

実行結果

条件1:ファイル:C:\temp\abc.txtが存在する。
[7]ファイル:[C:\temp\abc.txt]の削除に成功しました
条件2:ファイル:C:\temp\abc.txtが存在しない。
[4]ファイル:[C:\temp\abc.txt]が存在しません
条件3:ファイル:C:\temp\abc.txtをエディタで編集中にプログラムを実行する。
[9]ファイル:[C:\temp\abc.txt]の削除に失敗しました

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

このプログラムは、ディレクトリ:C:\tempにあるabc.txtというファイルの存在確認を行う。その後、ファイルが存在して入れば、ファイルを削除するというものだ。

  • [1] 文字列pathnameにファイルのパスと名前を設定する。
  • [2] Fileクラスからpathnameをパス名に持つfileインスタンスを生成する。
  • [3] existsメソッドにより、ファイルの存在を確認する。
  • [4] ファイルが存在しないことを示すメッセージを表示する。
  • [5] プログラムを終了する。
  • [6] deleteメソッドにより、ファイルの削除を行う。
  • [7] ファイルの削除が成功したことを示すメッセージを表示する。
  • [8] プログラムを終了する。
  • [9] ファイルの削除が失敗したことを示すメッセージを表示する。

まとめ

このページでは、Javaでファイルの確認と削除をする方法についてまとめてきた。

Fileクラスのexistsメソッドとdeleteメソッドを使えば実現できる。参考にしてサンプルプログラムから試してみてほしい。

]]>
https://eng-entrance.com/java-file-exists/feed 0
Javaでファイルパスを得る方法 (getPath, getAbsolutePath) https://eng-entrance.com/java-file-path https://eng-entrance.com/java-file-path#comments Fri, 30 Sep 2016 01:38:07 +0000 http://eng-entrance.com/?p=2879 ローカルでファイルを扱うとき、ファイルやディレクトリのパスが必要だというときが必ずある。

このページではJavaのファイルやファイルパスを得る方法をまとめた。参考にしていただければと思う。

Javaのファイル・パスを得る方法

Fileクラスは、ファイルとディレクトリの両方を抽象パス名で扱っている。そのパス情報をずっと持ち続けている。もしファイルがどこに置かれているかが知りたくなったら、そのパスに関する情報を取り出せばよい。

最初のコードからパス名やファイル名を探す必要はない。ファイルであれ、ディレクトリであれ、必要な時にそのパスをFileクラスのインスタンスから得ることができる。

ファイル・パスといっても、様々な視点からの表現がある。作業中のディレクトリを基準にしてどこにあるかを表すのと、ルート・ディレクトリから表現するのは違う。

ファイル・パスを読み取るために用意されたメソッドの詳細を見てみよう。

ファイル・パスを得るメソッド

ファイル・パスを得るための4つのメソッドの詳細を説明する。どのメソッドもパス名を抽象パス名から作り出す。その関係を図は示している。抽象パス名が絶対パス名か、それとも相対パス名かによって、メソッド呼び出しによって得られる結果が異なる。

ファイル・パスを得るために用意されたメソッド:

 

パス名

getPath()

戻り値の型

public String

内容

内容:この抽象パス名をパス名文字列に変える。

 

結果の文字列は、その名前を名前順に分けるためにデフォルトの名前区切り文字を使う。

 

戻り値:抽象パス名の文字列の形式

絶対パス名

getAbsolutePath()

戻り値の型

public String

内容

内容:この抽象パス名の絶対パス名の文字列を戻す。

 

もしこの抽象パス名がいつも絶対ならば、パス名の文字列は単にgetPath()メソッドによるかのように戻される。もしこの抽象パス名が空の抽象パス名であるならば、そのシステムプロパティuser.dirによって名付けられた作業中のユーザ・ディレクトリの文字列が戻される。

もしそうでなければこのパス名はシステムに依存する方法で解決される。UNIXシステム上、作業中のユーザ・ディレクトリを基に、相対パス名から絶対パス名が作られる。マイクロソフトウィンドウズシステムにおいて、パス名によって名付けられた作業中のディレクトリを基に、相対パス名から絶対パス名が作られる。そうであってもなくても、それは作業中のユーザ・ディレクトリを基に解決される。

 

戻り値: この抽象パス名として同じファイル、もしくはディレクトリが示す絶対パス名の文字列

 

例外:SecurityException – もし必要とされるシステムプロパティの値がアクセスできなければ。

参照:isAbsolute()

親パス名

getParent()

戻り値の型

public String

内容

この抽象パス名の親のパス名文字列を戻す。もしくは、もしこのパス名が親ディレクトリ名を付けないのなら、nullのパス名を戻す。

 

一つの抽象パス名の親は、パス名の接頭語と、最後を除くパス名の並びの中にある各々の名前から構成される。もし名前の並びが空であるならば、そのパス名は親ディレクトリの名前を付けない。

 

戻り値:

この抽象パス名の親のパス名文字列を戻す。もしくは、このパス名が親ディレクトリ名を付けないのなら、nullのパス名を戻す。

getName()

戻り値の型

public String

内容

この抽象パス名によって示されたファイルの名前、もしくはディレクトリを戻す。

これはパス名の名前の並びのちょうど最後の名前である。もし、パス名の名前の並びが空であるならば、空の文字列が戻される。

 

戻り値:この抽象パス名によって示されたファイルの名前、もしくはディレクトリ。もしパス名の名前の並びが空であるならば、空の文字列。

ファイル・パスを得るサンプルプログラム

それでは実際にサンプルプログラムを確認してみよう。

このプログラムは、WindowsのC:ドライブのディレクトリ:C:\temp\abcにファイル:def.txtがあるとして、各メソッドがどのようにそのパスを取り出すかを示している。また、Cドライブが指定されていないディレクトリ:\temp\abcにファイル:def.txtがある場合は、どのようにパス名が取り出されるかも示している。

import java.io.File;

public class Pathname {
    public static void main(String[] args) {
        String pathname = "C:\\temp\\abc\\def.txt";//[1]
        File file = new File(pathname);//[2]

        System.out.println("[3] getPath():[" + file.getPath() + "]");
        System.out.println("[4] getAbsolutePath():[" + file.getAbsolutePath() + "]");
        System.out.println("[5] getParent():[" + file.getParent() + "]");
        System.out.println("[6] getName():[" + file.getName() + "]");
        System.out.println("");

        String xpathnameWithOutDrive = "\\abc\\def.txt";//[7]
        File fileWithOutDrive = new File(xpathnameWithOutDrive);//[8]

        System.out.println("[9] getPath():[" + fileWithOutDrive.getPath() + "]");
        System.out.println("[10] getAbsolutePath():[" + fileWithOutDrive.getAbsolutePath() + "]");
        System.out.println("[11] getParent():[" + fileWithOutDrive.getParent() + "]");
        System.out.println("[12] getName():[" + fileWithOutDrive.getName() + "]");
    }
}

実行結果

[3] getPath():[C:\temp\abc\def.txt]
[4] getAbsolutePath():[C:\temp\abc\def.txt]
[5] getParent():[C:\temp\abc]
[6] getName():[def.txt]

[9] getPath():[\abc\def.txt]
[10] getAbsolutePath():[C:\abc\def.txt]
[11] getParent():[\abc]
[12] getName():[def.txt]

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

  • [1] 文字列pathnameにC:\temp\abc\def.txt"を設定する。
  • [2] Fileクラスからpathnameをパス名に持つfileインスタンスを生成する。
  • [3] getPathの戻り値:抽象パスから作られてパス名を表示する。
  • [4] getAbsolutePathの戻り値:絶対パス名を表示する。
  • [5] getParentの戻り値:親パス名を表示する。
  • [6] getNameの戻り値:ファイル名またはディレクトリ名を表示する。
  • [7] 文字列pathnameWithOutDriveに\temp\abc\def.txt"を設定する。
  • [8] FileクラスからpathnameWithOutDriveをパス名に持つfileインスタンスを生成する。
  • [9] getPathの戻り値:抽象パスから作られてパス名を表示する。
  • [10] getAbsolutePathの戻り値:絶対パス名を表示する。
  • [11] getParentの戻り値:親パス名を表示する。
  • [12 getNameの戻り値:ファイル名またはディレクトリ名を表示する。

まとめ

このページではJavaでファイルのパスやディレクトリのパスを取得する方法についてまとめた。

相対パス、絶対パスそれぞれについてお伝えしたので参考にしていただければと思う。

]]>
https://eng-entrance.com/java-file-path/feed 8
Javaでファイルかディレクトリかを調べる方法 (isFile, isDirectory) https://eng-entrance.com/java-file-isfile https://eng-entrance.com/java-file-isfile#respond Wed, 28 Sep 2016 00:19:14 +0000 http://eng-entrance.com/?p=2863 Javaでローカルファイルがファイルかディレクトリかを調べるには、FileクラスのisFileやisDirectoryを使えばいい。

このページではそれぞれの基本的な使い方と、サンプルプログラムを用意してみた。使い方の参考にしてほしい。

Javaのファイルとディレクトリの調べ方

調べるためのメソッド

Fileクラスは、ファイルとディレクトリの両方を抽象パス名で扱っている。区別されてないのだ。

このため、コードを見ただけでは分からない場合がある。こんなときのために、ファイルかディレクトリかを調べるためのメソッドが用意されている。

ファイルとディレクトリは違う

Fileクラスにはファイルもディレクトリも同じように扱うことのできる共通メソッドがある。しかし、対象がファイルかディレクトリによって、メソッドに違いがある。

例えば、削除だ。ファイルは中身が空でなくても削除できるが、ディレクトリは中身が空の時だけ削除できる。

listメソッドなども抽象パスがディレクトリをでなければならない。その他にもあるので、注意してほしい。

メソッド

ファイルかディレクトリかを調べるために用意されているふたつのメソッドの詳細を見てみよう。

ファイルか調べるisFile()

ファイルかを調べるのはisFileメソッドだ。

isFile()

戻り値の型

public boolean

内容

抽象パス名によって示されたファイルが、普通のファイルかどうかを調べる。ファイルがディレクトリでなくて、システムに依存する基準を満たしていれば、普通のファイルである。Javaアプリケーションによって作られたどんなディレクトリでないファイルは、普通のファイルであることが保証されている。

ファイルが普通のファイルでないことをI/O例外と区別したい場合や、同じファイルのいくつかの属性が同時に要求される場合は、Files.readAttributesメソッドが使用できるかもしれない。

戻り値:true - 抽象パス名で示されたファイルが存在し、かつ普通のファイルであるならば。false – それ以外。

SecurityException – もし、セキュリティマネジャーが存在して、itsSecurityManager.checkRead(java.lang.String)メソッドがそのファイルかディレクトリの読み込み・アクセスを拒否したならば。

ディレクトリかを調べるisDirectory()

ディレクトリかを調べるにはisDirectoryメソッドを使う。

isDirectory()

戻り値の型

public boolean

内容

抽象パス名によって示されたファイルが、ディレクトリかどうかを調べる。

ファイルがディレクトリでないことをI/O例外と区別したい場合や、同じファイルのいくつかの属性が同時に要求される場合は、Files.readAttributesメソッドが使用できるかもしれない。

戻り値:true - 抽象パス名で示されたファイルが存在し、かつディレクトリであるならば。false – それ以外。

SecurityException – もし、セキュリティマネジャーが存在して、itsSecurityManager.checkRead(java.lang.String)メソッドがそのファイルかディレクトリの読み込み・アクセスを拒否したならば。

ディレクトリの内容を調べる

また、listFiles()を使うと、名前の一覧を取得するのではなく、ディレクトリに含まれるファイルやディレクトリを一覧として取得できる。

listFiles()

戻り値の型

public File[]

内容

抽象パス名で示されたディレクトリ内のファイル群を表す抽象パス名の配列を戻す。

もし、この抽象パス名がディレクトリを示していないなら、このメソッドはnullを返す。そうでなければ、Fileオブジェクトの配列が戻される。そして、それらの要素のひとつひとつがディレクトリ内の各々のファイルかディレクトリに対応している。ディレクトリそのものを示しているパス名とディレクトリの親ディレクトリは結果に含まれない。各々の結果としての抽象パス名は、File(File, String)コンストラクタを使用して生成される。従って、もしこのパス名が絶対であれば、各々の結果としてのパス名も絶対となる。もしこのパス名が相対であれば、各々の結果としてのパス名も同じディレクトリの相対となる。

結果としての配列中の名前文字列が何らかの仕様に基づく順序となることは保証されていない。つまり、特にアルファベット順になるということは保証されていない。

考慮点:Filesクラスは、ディレクトリやディレクトリ内のファイル群を繰り返し操作するためにnewDirectoryStreamメソッドを定義している。これは、大きなディレクトリを操作する場合に、資源を節約するかもしれない。

 

戻り値:抽象パス名で示されたディレクトリ内のファイル群を表す抽象パス名の配列を戻す。ディレクトリが空であれば、配列も空である。もし、この抽象パス名がディレクトリを表現していないならば、nullを戻す。

 

SecurityException – もし、セキュリティマネジャーが存在して、itsSecurityManager.checkRead(java.lang.String)メソッドがそのファイルかディレクトリの読み込み・アクセスを拒否したならば。

 

以降:1.2

ディレクトリ内を調べるサンプルプログラム

それでは実際にサンプルプログラムを確認してみよう。

WindowsのC:ドライブのディレクトリ:C:\temp\abcに以下のようなファイルやフォルダがある。このとき、プログラムはディレクトリに含まれている内容を調べ、すべての内容物についてファイルなのか、それともディレクトリかを表示する。

Javaディレクトリ

import java.io.File;

public class TestWhetherFileOrDirectory {
    public static void main(String[] args) {
        String pathname = "C:\\temp\\abc";//[1]
        File file = new File(pathname);//[2]

        File[] files = file.listFiles();//[3]
        for (int index = 0; index < files.length; index ++) {//[4]
            File item = files[index];//[5]

            if (item.isDirectory()) {//[6]
                System.out.println("[7][" + item.getName() + "]はディレクトリです");
                continue;//[8]
            }
            if (item.isFile()) {//[9]
                System.out.println("[10][" + item.getName() + "]はファイルです");
                continue;//[11]
            }
            System.out.println("[12][" + pathname + "]はディレクトリでもファイルでもありません");
        }
    }
}

実行結果

[7] [Directory001]はディレクトリです
[7] [Directory002]はディレクトリです
[10] [File001.txt]はファイルです
[10] [File002.txt]はファイルです

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

  • [1] 文字列pathnameにディレクトリのパスと名前を設定する。
  • [2] Fileクラスからpathnameをパス名に持つfileインスタンスを生成する。
  • [3] ディレクトリの内容を配列:filesとして取得する。
  • [4] 配列:filesに含まれる要素の数だけループを繰り返す。
  • [5] 配列の要素を取り出す。
  • [6] 配列の要素がディレクトリかを調べる。
  • [7] 要素がディレクトリであることを表示する。
  • [8] ループの先頭に戻る。
  • [9] 配列の要素がファイルかを調べる。
  • [10] 要素がファイルであることを表示する。
  • [11] ループの先頭に戻る。
  • [12] ファイルでもディレクトリでもないことを表示する。

ディレクトリを削除するサンプルプログラム

ディレクトリを削除しようとしても、空でないディレクトリは削除できない。

この問題を解決するために、このプログラムはディレクトリが空であることを調べてから、削除を行っている。

現実のプログラムでは、さらに抽象パス名がディレクトリかを調べてることも必要になるが、ここではシンプルにするために省いている。

import java.io.File;

public class DirectoryDelete {
    public static void main(String[] args) {
        String pathname = "C:\\temp\\abx";//[1]
        File file = new File(pathname);//[2]

        File[] files = file.listFiles();//[3]
        if (files.length > 0) {//[4]
            System.out.println("[10]ディレクトリ:[" + pathname + "]は空でないので、削除できません");
            return;//[8]
        }
        if (file.delete()) {//[7]
            System.out.println("[8]ファイル:[" + pathname + "]の削除に成功しました");
            return;//[9]
        }
        System.out.println("[10]ファイル:[" + pathname + "]の削除に失敗しました");
    }
}

実行結果

条件1:ディレクトリ:C:\temp\abcが空でない。
[5]ディレクトリ:[C:\temp\abc]は空でないので、削除できません
条件2:ディレクトリ:C:\temp\abcが空である。
[8]ファイル:[C:\temp\abc]の削除に成功しました
条件3:ディレクトリ:C:\temp\abcにコマンドプロンプトを移動する。
[10]ファイル:[C:\temp\abc]の削除に失敗しました

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

  • [1] 文字列pathnameにディレクトリのパスと名前を設定する。
  • [2] Fileクラスからpathnameをパス名に持つfileインスタンスを生成する。
  • [3] ディレクトリの内容を配列:filesとして取得する。
  • [4] 配列:filesの要素数が0以上かを調べる。
  • [5] 要素数が0以上であるなら、ディレクトリが空でないので削除できないことを表示する。
  • [6] プログラムを終了する。
  • [7] deleteメソッドにより、ファイルの削除を行う。
  • [8] ファイルの削除が成功したことを表示する。
  • [9] プログラムを終了する。
  • [10] ファイルの削除が失敗したことを表示する。

まとめ

このページではJavaでファイルやディレクトリを判別する方法についてお伝えした。

Fileクラスには色々なメソッドがあるが、isFileやisDirectoryも覚えておいていいメソッドだ。サンプルプログラムを動かして確認していただければと思う。

]]>
https://eng-entrance.com/java-file-isfile/feed 0
【サンプルコード付き】Javaでファイルを扱うFileクラスの使い方 https://eng-entrance.com/java-file-file https://eng-entrance.com/java-file-file#respond Sun, 25 Sep 2016 23:03:40 +0000 http://eng-entrance.com/?p=2843 JavaのFileクラスはファイルやディレクトリを扱うためのクラスだ。

例えばファイルパスを取得したり、ディレクトリを作成したり、ファイルを削除したりとローカル環境を編集するのに使うことができる。

このページではFileクラスについてまとめている。ファイルを扱う必要がある方は参考にしてほしい。

JavaのFileクラス

Fileクラスは、システムによって異なるファイルとディレクトリのパス名をシンプルにひとつの表現にしたものだ。このクラスは、パス名をシステムに依存しない階層的な抽象パス名によって表現している。

抽象パス名を構成する文字列:

抽象パス

  • ディスクドライブ「C:\」、Linuxのrootディレクトリ「/」のようなシステムに依存するオプションの接頭文字列
  • ゼロかそれ以上の文字列による名前の並び

抽象パス名の最初の名前はディレクトリかもしれない。また、それに続く名前はディレクトリかファイルの名称かもしれない。

パス名と抽象パス名の間の変換は、システムに依存している。抽象パス名がパス名に変換されるとき、各々の名前はデフォルトの区切り文字で分けられる。デフォルトの区切り文字は、システム・プロパティ:file.separatorに定義されていて、このクラスのpublic static fields separatorとseparatorCharによって利用可能となる。パス名が抽象パス名に変換されるとき、名前はデフォルトの区切り文字で分離されるか、基本システムによってサポートされた他の区切り文字で分離される。

書き方の基本は簡単だ。

File インスタンス名 = new File(パス名)

JavaでのFileのディレクトリとファイルを表現する書き方の詳細を確認していこう。

コンストラクタの引数による違い

ひとつのパス名文字列

File(String pathname)

内容

新しいFileのインスタンスを、与えられたパス名文字列から抽象パス名に変換することにより生成する。

 

引数:pathname – パス名文字列

例外:NullPointerException – もし、パス名引数がnullならば

親と子のパス名文字列

public File(String parent, String child)

内容

新しいFileのインスタンスを、親のパス名文字列と子供のパス名から生成する。

もしparentがnullならば、新しいFileのインスタンスは、あたかも引数が一つのFileコンストラクタを起動したかのように、与えられたchildパス名文字列からFileインスタンスが生成される。そうでなければ、親パス名文字列がディレクトリを示し、子パス名文字列がディレクトリかファイルのどちらかを示している。もし子パス名文字列が完全ならば、それはシステムに依存する方法で相対パス名に変換される。

もしparentが空の文字列ならば、childが絶対パス名に変換され、システムに依存するデフォルト・ディレクトリを基に結果を決定することによって、新しいFileインスタンスが生成される。そうでなければ、各々のパス名文字列は抽象パス名に変換され、child抽象パス名はparentを基にして決定される。

 

引数:

parent – 親パス名文字列

 child – 子パス名文字列

例外:NullPointerException – もしchildがnullならば、

親抽象パス名と子パス名文字列

File(File parent, String child)

内容

新しいFileのインスタンスを、与えられた親抽象パス名と子パス名文字列から生成する。

もしparentがnullならば、新しいFileのインスタンスは、あたかも引数が一つのFileコンストラクタを起動したかのように、与えられたchildパス名文字列からFileインスタンスが生成される。そうでなければ、親抽象パス名がディレクトリを示し、子パス名文字列がディレクトリかファイルのどちらかを示している。もし子パス名文字列が完全ならば、それはシステムに依存する方法で相対パス名に変換される。

もしparentが空の抽象パス名ならば、childが絶対パス名に変換され、システムに依存するデフォルト・ディレクトリを基に結果を決定することによって、新しいFileインスタンスが生成される。そうでなければ、各々のパス名文字列は抽象パス名に変換され、child抽象パス名はparent基にして決定される。

 

引数:

parent – 親抽象パス名

 child – 子パス名文字列

例外:NullPointerException – もしchildがnullならば、

パス名を表現するサンプルプログラム

それでは実際にサンプルプログラムを確認してみよう。

3つのサンプルプログラムはWindowsのC:ドライブのディレクトリ:C:\temp\abcに以下のようなファイルやフォルダがあることを、各種のコンストラクタを使用して表現しようとしている。

サンプルプログラム

ひとつのパス名文字列コンストラクタのサンプルコード

import java.io.File;

public class FileConstructorWithOneStringParameter {
    public static void main(String[] args) {
        String directory001Pathname = "C:\\temp\\abc\\Directory001";//[1]
        String directory002Pathname = "C:\\temp\\abc\\Directory002";//[2]
        String file001Pathname = "C:\\temp\\abc\\File001";//[3]
        String file002Pathname = "C:\\temp\\abc\\File002";//[4]
        File file;//[5]

        file = new File(directory001Pathname);//[6]
        System.out.println("[7] File(directory001Pathname) -> [" + file.getAbsolutePath() + "]");
        file = new File(directory002Pathname);//[8]
        System.out.println("[9] File(directory002Pathname) -> [" + file.getAbsolutePath() + "]");
        file = new File(file001Pathname);//[10]
        System.out.println("[11] File(file001Pathname) -> [" + file.getAbsolutePath() + "]");
        file = new File(file002Pathname);//[12]
        System.out.println("[13] File(file002Pathname) -> [" + file.getAbsolutePath() + "]");
    }
}

実行結果

[7] File(directory001Pathname) -> [C:\temp\abc\Directory001]
[9] File(directory002Pathname) -> [C:\temp\abc\Directory002]
[11] File(file001Pathname) -> [C:\temp\abc\File001]
[13] File(file002Pathname) -> [C:\temp\abc\File002]

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

このプログラムは、親ディレクトリが共通の4つのパス名をFile(String pathname)コンストラクタを使って表現している。

  • [1] パス名:C:\temp\abc\Directory001"をdirectory001Pathnameに設定する。
  • [2] パス名:C:\temp\abc\Directory002"をdirectory002Pathnameに設定する。
  • [3] パス名:C:\temp\abc\File001をfile001Pathnameに設定する。
  • [4] パス名:C:\temp\abc\File002"をfile001Pathnameに設定する。
  • [5] Fileクラスのインスタンス:fileを宣言する。
  • [6] directory001PathnameらFileクラスのインスタンス:fileを生成する。
  • [7] fileの絶対パス名を表示する。
  • [8] directory001PathnameらFileクラスのインスタンス:fileを生成する。
  • [9] fileの絶対パス名を表示する。
  • [10] directory001PathnameらFileクラスのインスタンス:fileを生成する。
  • [11] fileの絶対パス名を表示する。
  • [12] directory001PathnameらFileクラスのインスタンス:fileを生成する。
  • [13] fileの絶対パス名を表示する。

親と子のパス名文字列コンストラクタのサンプルコード

import java.io.File;

public class FileConstructorWithTwoStringParameters {
    public static void main(String[] args) {
        String parent = "C:\\temp\\abc";//[1]
        String[] children = {"Directory001", "Directory002", "File001", "File002"};//[2]

        for (int index = 0; index < children.length; index ++) {//[3]
            File file = new File(parent, children[index]);//[4]
            System.out.println("[5] File(parent, child[" + index +"]) -> [" + file.getAbsolutePath() + "]");
        }
    }
}

実行結果

[5] File(parent, child[0]) -> [C:\temp\abc\Directory001]
[5] File(parent, child[1]) -> [C:\temp\abc\Directory002]
[5] File(parent, child[2]) -> [C:\temp\abc\File001]
[5] File(parent, child[3]) -> [C:\temp\abc\File002]

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

このプログラムは、親ディレクトリが共通の4つのパス名をFile(String parent, String child)コンストラクタを使ってどのようにシンプルに表現できるかを示している。

  • [1] 親パス名:C:\temp\abcをparentに設定する。
  • [2] 4つの子パス名:Directory001, Directory002, File001, File002を配列:childrenに設定する。
  • [3] 配列の数だけループさせる。
  • [4] parentとchildrenからFileクラスのインスタンス:fileを生成する。
  • [5] fileの絶対パス名を表示する。

親抽象パス名と子パス名文字列コンストラクタのサンプルコード

import java.io.File;

public class FileConstructorWithAbstractPathname {
    public static void main(String[] args) {
        File parent = new File("C:\\temp\\abc");//[1]
        String[] children = {"Directory001", "Directory002", "File001", "File002"};//[2]

        for (int index = 0; index < children.length; index ++) {//[3]
            File file = new File(parent, children[index]);//[4]
            System.out.println("[5] File(parent, child[" + index +"]) -> [" + file.getAbsolutePath() + "]");
        }
    }
}

実行結果

[5] File(parent, child[0]) -> [C:\temp\abc\Directory001]
[5] File(parent, child[1]) -> [C:\temp\abc\Directory002]
[5] File(parent, child[2]) -> [C:\temp\abc\File001]
[5] File(parent, child[3]) -> [C:\temp\abc\File002]

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

このプログラムは、親ディレクトリが共通の4つのパス名をFile(File parent, String child)コンストラクタを使ってどのようにシンプルに表現できるかを示している。

  • [1] Fileクラスのインスタンス:parentを親パス名:C:\temp\abcから生成する。
  • [2] 4つの子パス名:Directory001, Directory002, File001, File002を配列:childrenに設定する。
  • [3] 配列の数だけループさせる。
  • [4] parentとchildrenからFileクラスのインスタンス:fileを生成する。
  • [5] fileの絶対パス名を表示する。

まとめ

このページではJavaのFileクラスについてまとめてきた。

細かい部分を知るよりも、サンプルコードを打って動かしたほうがわかりやすいだろう。ぜひトライしていただければと思う。

]]>
https://eng-entrance.com/java-file-file/feed 0