Fileクラス
コンストラクタと値
Fileはファイルやディレクトリを扱う一番メジャーなクラスです。
new File("pathname.txt");
目次
1.インスタンスの生成
Fileクラスのインスタンスは、1つのファイル、又はディレクトリを表します。
Fileクラスは、java.io の所属です。
使用するためには「
import java.io.File;」が必要です。
Fileクラスのインスタンスは、ファイルパスを表す文字列を与えて
new演算子で生成します。
ご参照↓
第十五章 アクセス修飾子
publicとimport
public File(String pathname)
2.サンプルコード
とりあえずインスタンスを生成してみよう。
文字列のリテラルは「""」で文字列を囲む。
絶対パスでも相対パスでも大丈夫だが、
相対パスがオススメだ。
//Sample01_01.java
import java.io.File;
class Sample01_01{
public static void main(String[] args){
File file = new File("pathname.txt");
String strPath = file.getPath();//←パス名取得
System.out.println(strPath);
}
}
この例では file が生成されたインスタンスです。
インスタンスを生成しただけではよくわからないので、「file.getPath()」でパス名を取得してみました。
出来上がった Sample01_01.java を ws ディレクトリに保存して、コマンドラインから、コンパイルと実行をしてみましょう。
コマンドライン
>cd ws
ws>javac Sample01_01.java
ws>java Sample01_01
pathname.txt ←ファイルパス
これで
wsディレクトリ にある
「pathname.txt」というファイル
(又はディレクトリ)を示す
Fileクラスのインスタンスが生成で来た。
簡単ね。
3. インスタンスの生成はファイルの生成じゃない
ここで重要なのが、
Fileのインスタンスを生成しても
そのファイルが実在するかどうか
分からない点だ。
え?
インスタンスの生成=ファイルの生成
じゃないの?
実は、Fileクラスのインスタンス化は、
変数 path に、引数の文字列を
代入するだけだ。
Fileクラス コンストラクタと値の抜粋
Fileクラスのコンストラクタを見てみましょう。
引数である pathnameを、
String変数の path に代入しただけです。
Fileクラスのコンストラクタと値の抜粋
private final String path;
public File(String pathname) {
if (pathname == null) {
throw new NullPointerException();
}
this.path = fs.normalize(pathname);
this.prefixLength = fs.prefixLength(this.path);
}
「normalize」や。
「prefixLength」が気になるが、
今はスルーだ。
重要
インスタンスの生成は、ファイルの生成 ではありません。
引数の文字列を、String変数の path に代入しただけです。
この時点では、ファイルの生成も、存在の確認も行っていないのです。
この存在の不確かなpathの文字列を「抽象パス名」と呼びます。
もう一つだけ。
一度生成されたコンストラクタの
抽象パス名は変更できない。
Stringクラスに似ているな。
重要
String変数の path には、
final修飾子が付与されているので、変更できません。
これだけだと実感がわかないな。
もう少し説明を続けよう。
5.prefixLength と normalize の知らなくてもいい話
どーしても気になっちゃう人だけ
読んでくれ。
でも超ザックリだぞ?
normalizeメソッドの超ザックリな役割
インスタンス化する際に与えた文字列は、
path に代入される前に
FileSystem#.normalizeメソッドによって標準化されます。
具体的には
- ファイル区切り文字の重複の修正 "//" → "/"
- ファイル区切り文字の読替 '/' → '¥' (Windows版のみ)
が行われます。
final int変数 prefixLengthの超ザックリな役割
抽象パス名の内、ルートを表す文字列が先頭から何文字あるかを示す値です。
具体的には
- Linux版では、先頭文字が「/」であれば prefixLength=1 その他は prefixLength=0
- Windows版では、先頭文字が「\\」とか「c:」とかならその文字数 その他は prefixLength=0
です。
prefixLength == 0 なら相対パス
prefixLength != 0 なら絶対パスとして扱われます。
お疲れ様でした。