検索

キーワード


【Java】Pathオブジェクトを生成する方法(java.nio.fileパッケージ)

  • 公開日:2021-05-02 23:31:38
  • 最終更新日:2021-05-02 23:33:22
【Java】Pathオブジェクトを生成する方法(java.nio.fileパッケージ)

java.nio.fileパッケージを用いたJava上でのファイル操作は、基本的に以下のような手順になります。

  • FileSystemクラスgetPathメソッドまたはPathクラスgetメソッドで、ファイルやディレクトリの場所を表すPathオブジェクトを生成する
  •  ↓
  • Filesクラスで実際のファイル操作を行う

上記のうち、当記事では、Filesクラスで実際のファイル操作を行う前段階となる、Pathオブジェクト生成する以下の二通りの方法について解説します。

  • FileSystemクラスgetPathメソッドを使う方法
  • Pathクラスgetメソッドを使う方法

また、java.io.Fileオブジェクトと、java.nio.file.Pathオブジェクトを相互に変換する方法についても紹介します。

  • FileオブジェクトからPathオブジェクトを生成する方法
  • PathオブジェクトからFileオブジェクトを生成する方法

java.nio.fileパッケージの概要について知りたい方は、以下の記事を参照して下さい。

【Java】java.nio.fileパッケージ(NIO.2)

また、PathオブジェクトFilesクラスを使った具体的なファイル操作は、以下の記事を参照して下さい。

【Java】java.nio.fileパッケージの使用例①(ファイルの作成、存在チェック)

【Java】java.nio.fileパッケージの使用例②(移動・コピー、削除)

【Java】java.nio.fileパッケージの使用例③(ファイル属性の取得・変更)


FileSystemsクラス、FileSystemクラス

名前が似ててややこしいですが、FileSystemクラスFileSystemsクラスのメソッドから取得されるクラスです。FIleSystemsクラスからFileSystemクラスを取得し、FIleSystemクラスのgetPathメソッドを呼び出すことで、Pathオブジェクトを生成します。


FileSystemsクラス

FileSystemsクラスは、実行している環境でアクセス可能なファイルシステム(デフォルトのファイルシステム)を返す、以下のようなgetDefault()メソッドを定義しています。

メソッド名修飾子と返り値の型説明
getDefault()

static FileSystem

デフォルトのファイルシステムを返します。


FileSystemsクラスのメソッドの記述例

FileSystem fs = FileSystems.getDefault();


FileSystemクラス

Pathオブジェクトを生成するgetPathメソッドの他、ファイルにアクセスするための様々なメソッドを持ちます。主要なものを以下の表にまとめました。

メソッド名修飾子と返り値の型説明
getPath(String first, String... more)abstract Pathファイルやディレクトリの場所を表すPathオブジェクトを生成します。
1つのパス文字列、または分割されたパス文字列を引数として渡しまず。
getSeparator()abstract Stringファイルシステムにおいて、区切り文字(セパレータ)として設定された文字を返します。
gerRootDirectories()abstract Iterable<Path>ルートディレクトリを返します。


FileSystem.getPathメソッドの記述例

//デフォルトのファイルシステムを取得します。
FileSystem fs = FileSystems.getDefault();

//Pathオブジェクトを作成します。getPathメソッドに渡したパスにファイルやディレクトリが存在するかどうかは問いません。
Path path1 = fs.getPath(".\\NIO1.txt");

//ディレクトリの場合は以下のように記述します。
Path path2 = fs.getPath("C:\\JavaWorkspace\\Works");

//文字列を分割して指定することも可能です。
Path path3 = fs.getPath("C:\\JavaWorkspace\\Works\\", "NIO2.txt");

//文字列の最後に区切り文字を入れずに引数に渡すと、カンマの箇所に自動的に区切り文字を補完します。
Path path4 = fs.getPath("C:", "JavaWorkspace", "Works", "NIO3.txt");


その他FileSystemsクラスのメソッドの記述例

//ファイルシステム上での区切り文字を返します。Windows環境で実行すると、通常は「\」が返ります。
String sep = fs.getSeparator()

//getRootDirectories()は、Iterable<path>型の返り値を返すので、
//for-each文を使ってループ処理をするなどして処理を行います。
Iterable<Path> roots = fs.getRootDirectories();


FileSystemクラスの応用例

FileSystemクラスのメソッドについて、具体的な使用例を紹介します。以下のサンプルコードでは、

  • ファイルシステムで使われる区切り文字の取得
  • 現在ファイルシステムで使われているルートディレクトリの取得

を行っています。getPathメソッドで生成したPathオブジェクトを使った実際のファイル操作については、以下の記事を参照して下さい。


getSeparatorメソッドとgetRootDirectoriesメソッドのサンプルコード
import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
import java.nio.file.Path;

public class FileSystemSample {
	public static void main(String[] args) {
		//デフォルトのファイルシステムを取得します。
		FileSystem fs = FileSystems.getDefault();

		//ファイルシステムで使われる区切り文字をコンソールに出力します。
		System.out.println("このファイルシステムの区切り文字は " + fs.getSeparator() + " です。");

		//現在ファイルシステムで使用しているルートディレクトリをすべてコンソールに出力します。
		for (Path root : fs.getRootDirectories()) {
			System.out.println(root);
		}
	}
}


getSeparatorメソッドとgetRootDirectoriesメソッドのサンプルコードの実行結果

上記のコードを実行すると、コンソールに以下のように出力されます。

このファイルシステムの区切り文字は \ です。
C:\
D:\
E:\
F:\


Pathsクラス

Pathsクラスは、Pathオブジェクトを生成するstaticメソッドのみを実装したクラスになります。FilesystemクラスgetPathメソッドを呼び出すよりも短く記述が出来るので、普段はこちらを使うのが良いでしょう。

メソッド名修飾子と返り値の型説明
get(String first, String... more) public static Pathファイルやディレクトリの場所を表すPathオブジェクトを生成します。
1つのパス文字列、または分割されたパス文字列を引数として渡しまず。


Paths.getメソッドの記述例

FilesystemクラスgetPathメソッドとほぼ同様の使い方をします。

//Pathオブジェクトを作成します。getメソッドに渡したパスにファイルやディレクトリが存在するかどうかは問いません。
Path path1 = Paths.get(".\\NIO1.txt");

//ディレクトリの場合は以下のように記述します。
Path path2 = Paths.get("C:\\JavaWorkspace\\Works");

//文字列を分割して指定することも可能です。
Path path3 = Paths.get("C:\\JavaWorkspace\\Works\\", "NIO2.txt");

//文字列の最後に区切り文字を入れずに引数に渡すと、カンマの箇所に自動的に区切り文字を補完します。
Path path4 = Paths.get("C:", "JavaWorkspace", "Works", "NIO3.txt");


Fileオブジェクトとの互換性

java.io.Fileオブジェクトと、java.nio.file.Pathオブジェクトは相互に変換可能です。


FileオブジェクトからPathオブジェクトへの変換

FileオブジェクトからPathオブジェクトに変換するには、FileクラスtoPathメソッドを使います。

メソッド名修飾子と返り値の型説明
toPath() public PathFileオブジェクトからPathオブジェクトを返します。


toPathメソッドの記述例

//FileオブジェクトをPathオブジェクトに変換します。
File file = new File("ファイルのパス");
Path path = file.toPath();


PathオブジェクトからFileオブジェクトへの変換

PathオブジェクトからFileオブジェクトに変換するには、PathインターフェースtoFileメソッドを使います。

メソッド名修飾子と返り値の型説明
toFile()FilePathオブジェクトからFileオブジェクトを返します。


toFileメソッドの記述例

//PathオブジェクトをFileオブジェクトに変換します。
Path path = Paths.get("ファイルのパス");
File file = path.toFile();


まとめ

当記事では、Pathオブジェクトの生成方法について、2通りの方法を解説しました。また、FileオブジェクトPathオブジェクトを相互に変換する方法について解説しました。

java.nio.filesパッケージは、ファイルやディレクトリの場所のみを示すPathオブジェクトと、ファイル操作を行うメソッドを集めたFilesクラスというように分かれています。java.ioパッケージと比べて仕組みは複雑に見えますが、java.nio.filesパッケージには便利なメソッドが多く用意されており、実際のコードは簡潔に書くことが出来ます。まずはjava.nio.filesパッケージにおけるファイル操作の起点となるPathオブジェクトについて理解すれば、一見難しいように見えるNIO.2についても理解がしやすいと思います。

関連記事:

【Java】java.nio.fileパッケージ(NIO.2)

【Java】java.nio.fileパッケージの使用例①(ファイルの作成、存在チェック)

【Java】java.nio.fileパッケージの使用例②(移動・コピー、削除)

【Java】java.nio.fileパッケージの使用例③(ファイル属性の取得・変更)


【著者】

ゆうさい

フォワードソフト株式会社のエンジニア。経験はまだ浅いものの、Java、Python、JavaScriptなど様々な言語の他、クラウドやネットワーク技術を勉強しています。PythonやVBAを使った自動化で楽をするのを考えるのが好きです。 Oracle Certified Java Programmer Gold SE 11、HTML5プロフェッショナル認定試験レベル2、AWSプラクティショナーなどの情報資格を保有しています。

よく読まれている記事
【Java】JSPでタグライブラリを使う(JSTL)

【Java】JSPでタグライブラリを使う(JSTL)

こんにちは。エンジニアの新田です!ここでは、システムエンジニアとして働いている私が、システム開発手法や開発言語について紹介していこうと思います。今回は、JSPの標準タグライブラリ「JSTL」について紹介します。Javaについて勉強している方、Webアプリケーションを構築したいと思っている方の参考になれば幸いです!関連記事リンク: 【Java】JSPの基本的な構文/【Java】JSPのアクションタグ

【Java】Stringクラス文字列を操作するメソッドの使い方まとめ!実例も紹介!

【Java】Stringクラス文字列を操作するメソッドの使い方まとめ!実例も紹介!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!そもそもStringとは何?『 String 』... Java言語において文字列のデータ型を指します。基本デ

【Java】文字列の置き換え(String#format)!エスケープシーケンスのまとめも!!

【Java】文字列の置き換え(String#format)!エスケープシーケンスのまとめも!!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!Stringクラスformatメソッドの文字列整形【java.utilパッケージ】Formatterクラスfo

【Java】文字列格納後に変更可能!?StringBufferクラスとStringBuilderクラス!

【Java】文字列格納後に変更可能!?StringBufferクラスとStringBuilderクラス!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者にも✅、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!文字列を扱う3つのクラス【java.langパッケージ】java.langパッケージの文字列を扱うクラスにはS

【Java】値?変数?型??しっかり解説!『データ型(プリミティブ型と参照型)』

【Java】値?変数?型??しっかり解説!『データ型(プリミティブ型と参照型)』

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!プリミティブ型と参照型プログラム開発では型を持った変数を使ってデータのやり取りをしますが、データ型によって仕様