【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

SEからWebエンジニアへ転職した理由

侍エンジニア塾卒業生の小池さんは、以前は社内SEとして約5年ほど勤務していました。しかし業務内容は社内のヘルプデスク対応など、プログラムを書く仕事は全くなかったそうです。

SEながらプログラムを書けない現状に「将来仕事がなくなるんじゃないか」と不安を感じ、プログラミング学習を決意。

弊社スクールで学習し、無事ベンチャー企業のプログラマーとして転職に成功しました。そんな小池さんの学習法や転職体験談を伺いましたので、是非ご覧ください。

「プログラミングができないSEは仕事がなくなる」不安を感じたSEが未経験から転職成功するまで
更新日 : 2019年10月7日

書いた人

侍ブログ編集部

侍ブログ編集部

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

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説