受講料が最大70%OFF 受講料が最大70%OFF

Pathクラスは便利

Javaでファイルパスを扱う時に便利なPathクラス。例えば、ディレクトリバスを含むパス情報から、ファイル名を取り出すgetFileName()メソッドなど、ファイルパスを操作する時に便利なメソッドが一杯あります。

この記事では、JavaのPathクラスでよく使う便利なメソッドをサンプルコードを交えて解説します。

Pathのインスタンスを取得する方法

Pathを利用するには、Pathクラスのインスタンスを取得する必要があります。

インスタンスの取得には、FileSystemクラスのgetPathメソッドを使用します。getPathメソッドの引数に、取得したいディレクトリまたはファイルのパスを指定します。

import java.nio.file.FileSystems;
import java.nio.file.Path;

public class Main {
    public static void main(String[] args) {
        Path path = FileSystems.getDefault().getPath("/path/to/dir");
    }
}

getPathメソッドの引数を複数指定すると、渡した引数を連結させたパスのインスタンスが取得できます。

Path path = FileSystems.getDefault().getPath("/path/to/dir", "filename.txt");

FileSystem以外にも、PathsクラスのgetメソッドでもPathクラスのインスタンスが取得できます。

import java.nio.file.Path;
import java.nio.file.Paths;

public class SampleClass {
    public static void main(String[] args) {
        //PathsクラスでもPathのインスタンスを取得できる
        Path path = Paths.get("/path/to/dir", "filename.txt");
    }
}

絶対パスかどうかを調べる isAbsolute

isAbsolute()メソッドは、指定したパスが絶対パスかどうかを調べられます。絶対パスの場合、このメソッドはtrueを戻り値に返します。

以下のサンプルコードを見てみましょう。

Path path1 = FileSystems.getDefault().getPath("/path/to/dir", "filename.txt");
System.out.println(path1.isAbsolute());

Path path2 = FileSystems.getDefault().getPath("relative/dir", "filename.txt");
System.out.println(path2.isAbsolute());

コードを実行すると、次のような結果となり、絶対パスで指定している1つ目のパスは、isAbsoluteメソッドの結果がtrueになっています。

【実行結果】

true
false

OSの環境によって、絶対パスの判定が異なる

isAbsolute()メソッドでの、絶対パス判定は、OSによって判定結果が異なります。

例えば、「C:¥Path¥To¥File.txt」のような絶対パスをWindows環境で実行すれば、isAbsoluteメソッドはtrueを返しますが、MacやLinux環境で実行すると結果はfalseになります。

これは、Pathクラスは実行するオペレーションシステムに依存するため、ルートパスはスラッシュ(/)で書くMacやLinuxの環境では、「C:」ドライブなどの概念がなく、相対パスと判断されるためです。

ファイル名を取得する getFileName

getFileName()メソッドは、ディレクトリバスを含むパスから、ファイル名を取得します。開発の現場では、パスからファイル名を取り出すシーンは意外と多くあり、覚えておくと便利です。

Path path = FileSystems.getDefault().getPath("/path/to/file.txt");
System.out.println(path.getFileName());

【実行結果】

File.txt

親ディレウトリを取得する getParent

getParent()メソッドは、指定したパスの親パスを返します。ディレクトリ+ファイル名のパスの場合、ディレクトリパスが帰り、ディレクトリのみを指定した場合、1つ上の階層のディレクトリパスが返ります。

ファイル名を含むパスを指定した場合

Path path = FileSystems.getDefault().getPath("/path/to/dir/File.txt");
System.out.println(path.getParent());

【実行結果】

/path/to/dir

ディレウトリパスのみを指定した場合

Path path = FileSystems.getDefault().getPath("/path/to/dir");
System.out.println(path.getParent());

【実行結果】

/path/to

ルートパスを取得する getRoot

getRoot()メソッドは、パスのルートを返します。

Path pathC = FileSystems.getDefault().getPath("C:/path/to/dir");
Path pathD = FileSystems.getDefault().getPath("D:/path/to/dir");

System.out.println(pathC.getRoot());
System.out.println(pathD.getRoot());

【実行結果】

C:¥
D:¥

ルートが分からない相対パスなどで、getRoot()メソッドを呼んだ場合は、結果はnullになります。

Path path = FileSystems.getDefault().getPath("relative/dir");
System.out.println(path.getRoot());

【実行結果】

null

2つのパスをつなげる resolveメソッド

resolve()メソッドは、引数で指定したパスをつなげて、新しいPathクラスのインスタンスを作成します。

次の例では、「/path/to/dir」と「sub_dir/file1.txt」のパスをつなげた新しいPathを作成しています。

Path path = FileSystems.getDefault().getPath("/path/to/dir");
Path resolvePath = path.resolve("sub_dir/file1.txt");
System.out.println(resolvePath);

【実行結果】

/path/to/dir/sub_dir/file1.txt

path.resolve() メソッドの引数には、Pathクラスのインスタンスを指定することもできるため、上のコードは、次のように書き直すこともできます。

Path path1 = FileSystems.getDefault().getPath("/path/to/dir");
Path path2 = FileSystems.getDefault().getPath("sub_dir/file1.txt");
Path resolvePath = path1.resolve(path2);
ポテパンダの一言メモ

引数に絶対パスを渡すと思った結果にならない

resolve()メソッドの引数に、絶対パスを指定すると、戻り値には引数で渡した絶対パスがそのまま返ってきます。間違って絶対パスを引数に渡すと、思い通りの結果になることがあるため、注意が必要です。

Pathクラスを活用してファイルパスを操作しよう

Javaでファイルパスを扱う時に便利なPathクラスを解説してきました。Pathクラスはファイル操作を行う時の基本となりますので、是非覚えておきましょう。

【関連記事】
【Java】初心者必見!ファイル読み込みの方法2選

【Java基礎】プロパティファイルから情報を読み込む

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。