ローカルでファイルを扱うとき、ファイルやディレクトリのパスが必要だというときが必ずある。
このページでは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がある場合は、どのようにパス名が取り出されるかも示している。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
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() + "]"); } } |
実行結果
1 2 3 4 5 6 7 8 9 |
[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でファイルのパスやディレクトリのパスを取得する方法についてまとめた。
相対パス、絶対パスそれぞれについてお伝えしたので参考にしていただければと思う。
画像
【ファイル・パスを得るために用意されたメソッド:】
getParent() → abc¥sef¥ghi
が間違っていると思います。よろしくおねがいします
ご指摘いただきありがとうございます。
該当画像を修正いたしました。
引き続き、ご愛読のほど、よろしくお願いいたします。