【Java入門】ファイルパスの区切り文字(separator)の使い方(\、/)

Javaではファイルを操作するにはパスの指定が必要です。

しかし、ファイルのパスは環境によって区切り文字が違うので注意が必要です。

この記事では、

・ファイルの区切り文字(separator)とは
・プラットフォームごとの区切り文字の対応
・ファイル区切り文字の問題点

という基本的な内容から、

・プラットフォームごとに適したセパレータを生成する方法
・セパレータを置換する方法

などの応用的な使い方に関しても解説していきます。

今回はファイルのセパレータについて、わかりやすく解説します!

ファイルの区切り文字(separator)とは

ファイルセパレータ(区切り文字)とは、ファイルのパス指定において、パスとファイルを区切るときに使用する「¥」「\」「/」などの文字のことを指します

このファイルの区切り文字は、WindowsやLinuxなどのプラットフォームごとに指定方法が異なります。

以下ではプラットフォームごとにパスを指定していますが、Windows、Mac/Linuxで指定方法が異なることがわかります。

//Windows
File file = new File("c:¥¥tmp¥¥java.txt");

//Mac
File file = new File("/Users/ユーザー名/tmp/java.txt");

//Linux
File file = new File("/home/ユーザー名/tmp/java.txt”);

そもそもファイルのパスがどのようなものかについて詳しく知りたい方はこちらの記事を確認してください。

【Java入門】ファイルパスを取得・指定する(java.io.File/java.nio.file.Files)
更新日 : 2019年10月14日

プラットフォームごとの区切り文字の対応

ファイル区切り文字の問題点

上述したようにOSごとに区切り文字が異なるため、Fileクラスを使用する場合は、OSで使用されている区切り文字を適切に扱う必要があります。

Windowsなら「¥」「\」、MacやLinuxなら「/」

そのため、Fileクラスで異なるOSのファイル区切り文字を使用した場合、処理がうまくいかず環境によっては例外が発生する可能性もあります。

このような問題を避けるためには、ファイルのパス/ファイルは文字列で行わずにFileクラスのメソッドを使用する方法が確実です。

プラットフォームごとに適したFileクラスを生成する

プラットフォームごとに適切な区切り文字を指定するためには、Fileクラスのオブジェクト生成時に、getParentFileメソッドを指定する方法があります。

以下にgetParentFileメソッドを使用したオブジェクトを生成する方法を記述します。

public class fileClass{
	public fileClass() throws IOException{
		
		File file1 = new File("/Users/Shared/java/java.txt");
		
		//getParentFileで親ディレクトリを取得する
		File file2 = new File(file1.getParentFile(), "java.txt");
		
		System.out.println(file2.getPath());
	}
}

実行結果:

/Users/Shared/java/java.txt

このサンプルでは、Fileクラスのfile1オブジェクトではパス/ファイル名を文字列で指定していますが、file2のオブジェクトでは、第一引数にfile1に対してgetParentFile()で親ディレクトリを取得し、第二引数でファイル名を指定しています。

getParentFileメソッドを使用すれば、使用している開発環境のセパレータを取得できますので、プラットフォームごとに正しいパスを取得できます。

区切り文字を置換する方法

文字列のパス/ファイルの区切り文字を置換するには、StringクラスのreplaceAllメソッドを使います。

replaceAllメソッドは区切り文字を一括で置換することができるので、区切り文字を指定して置換することができます。

replaceAllメソッドを使用して、区切り文字を一括で置換する方法を次のプログラムで確認してみましょう。

public class fileClass{
	public fileClass() throws IOException{
		
		File file = new File("/Users/Shared/java/java.txt");
		
		String strPath = file.getPath();
		
		System.out.println("置換前:" + strPath);
		
		// replaceAllメソッドを使用する
		strPath = strPath.replaceAll("/", "¥");
		System.out.println("置換後:" + strPath);
	}
}

実行結果:

置換前:/Users/Shared/java/java.txt
置換後:¥Users¥Shared¥java¥java.txt

極端な例ですが、replaceAllメソッドを使用すれば区切り文字をLinux/Macの「/」からWindowsの「¥」に変換することができます。

文字列の一括置換については、以下の記事で詳しく解説しています!

JDKのインストールとパスを設定する方法

Javaのプログラミング入門者がつまずきやすいのが、JDKをインストールするときに行うパスの設定です。

環境変数などの実際のパスの設定がどのように行われるのかを知りたい方にはぜひ確認していただきたいオススメの内容です。

JDKのインストールとパスの設定についてはこちらの記事で詳しく解説しているので、ぜひ確認してください。

【Java初心者必見!】Javaの開発環境を構築する方法を解説!
更新日 : 2019年5月7日

Fileクラスについてもっと詳しく知りたい方へ

Fileクラスのさまざまな使い方については、以下の記事にまとめていますので、ぜひ参考にしてくださいね!

まとめ

ここでは、ファイルパス指定持のセパレータについて、プラットフォームごとの違いや問題点、正しくセパレータを取得する方法や置換する方法などを解説しました。

JavaはマルチプラットフォームでOSに依存しないプログラミング言語ですが、OSごとの特性を理解していないと、今回のセパレータのように、思わぬ不具合が発生してしまうこともあります。

もしファイルのセパレータの指定方法を忘れてしまったら、この記事を思い出してくださいね!

LINEで送る
Pocket

ITエンジニアへ転職したい方におすすめ

自分を評価してくれる企業に転職して年収を上げたい! 自分のスキルにあった独自案件を知りたい!
エンジニアは今もっとも注目されている職業の1つ。エンジニアになって年収を増やしたい方や、あなたのスキルに見合った企業へ転職したいエンジニアの方も多いですよね。

しかし、大手の転職媒体は扱う求人数が多くても、誰もが登録しているので競争率もかなり高くなっています。そのため、あなたの条件に見合った企業を見つけても転職するためには、相応の努力とスキルが必要となります。

こういった媒体では、未経験からエンジニアを目指す方やエンジニア歴2〜3年で転職を考えている方にとって、最適な転職環境とはいえません。

そこでオススメしたいのが、未経験者や若手エンジニア向けの独自案件を多く掲載している「侍ワークス」です。

侍ワークスは、独自案件を多く掲載しているだけでなく、

・応募から就業まで一貫したサポート

・就業後もアフターフォロー

といった経験の浅い方や初めてエンジニアを目指す方にも安心のフォロー体制が整っています。もちろん登録は完全無料!しかも案件を見るだけなら登録も不要です。

まずは、お気軽にどんな求人があるか見てみてください。あなたにピッタリの企業がきっと見つかりますよ! 侍ワークスの求人情報を見る

書いた人

侍ブログ編集部

侍ブログ編集部

侍エンジニア塾は「人生を変えるプログラミング学習」をコンセンプトに、過去多くのフリーランスエンジニアを輩出したプログラミングスクールです。プログラミングに役立つ情報や有用な情報を発信していきます。
サービスページはこちら
ツイッターはこちら
フェイスブックはこちら