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に以下のようなファイルやフォルダがあることを、各種のコンストラクタを使用して表現しようとしている。
ひとつのパス名文字列コンストラクタのサンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
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() + "]"); } } |
実行結果
1 2 3 4 |
[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の絶対パス名を表示する。
親と子のパス名文字列コンストラクタのサンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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() + "]"); } } } |
実行結果
1 2 3 4 |
[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の絶対パス名を表示する。
親抽象パス名と子パス名文字列コンストラクタのサンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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() + "]"); } } } |
実行結果
1 2 3 4 |
[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クラスについてまとめてきた。
細かい部分を知るよりも、サンプルコードを打って動かしたほうがわかりやすいだろう。ぜひトライしていただければと思う。