1. 概要

オペレーティングシステムが異なれば、ファイルとパスの区切り文字として異なる文字を使用します。 アプリケーションを複数のプラットフォームで実行する必要がある場合は、これらを正しく処理する必要があります。

Javaは、適切なセパレーターを選択するのに役立ち、ホストのオペレーティングシステムで機能するパスを作成するのに役立つ関数を提供します。

この短いチュートリアルでは、正しいファイルとパスの区切り文字を使用するコードを作成する方法を理解します。

2. ファイルセパレータ

ファイル区切り文字は、特定の場所へのパスを構成するディレクトリ名を区切るために使用される文字です。

2.1. ファイルセパレータを取得する

Javaでファイルセパレータを取得する方法はいくつかあります。

File.separator を使用して、セパレータをStringとして取得できます。

String fileSeparator = File.separator;

このセパレータは、File.separatorCharを使用してcharとして取得することもできます。

char fileSeparatorChar = File.separatorChar;

Java 7以降、FileSystemsも使用できるようになりました。

String fileSeparator = FileSystems.getDefault().getSeparator();

出力は、ホストオペレーティングシステムによって異なります。 ファイル区切り文字は、Windowsでは \ 、macOSおよびUnixベースのオペレーティングシステムでは/です。

2.2. ファイルパスを作成する

Javaは、ディレクトリのリストからファイルパスを作成するためのいくつかの方法を提供します。

ここでは、Pathsクラスを使用しています。

Path path = Paths.get("dir1", "dir2");

MicrosoftWindowsでテストしてみましょう。

assertEquals("dir1\\dir2", path.toString());

同様に、LinuxまたはMacでテストできます。

assertEquals("dir1/dir2", path.toString());

ファイルクラスを使用することもできます。

File file = new File("file1", "file2");

MicrosoftWindowsでテストしてみましょう。

assertEquals("file1\\file2", file.toString());

同様に、LinuxまたはMacでテストできます。

assertEquals("file1/file2", file.toString());

ご覧のとおり、ファイルパスを作成するためのパス文字列を指定するだけで済みます。ファイル区切り文字を明示的に含める必要はありません。

3. パスセパレータ

パス区切り文字は、パスのリスト内の個々のパスを区切るためにオペレーティングシステムで一般的に使用される文字です。

3.1. パスセパレータを取得する

File.pathSeparator を使用して、パス区切り文字をStringとして取得できます。

String pathSeparator = File.pathSeparator;

パス区切り文字をcharとして取得することもできます。

char pathSeparatorChar = File.pathSeparatorChar;

どちらの例もパス区切り文字を返します。 これは、Windowsではセミコロン(; であり、MacおよびUnixベースのオペレーティングシステムではコロン(:)です。

3.2. ファイルパスを作成する

区切り文字として区切り文字を使用して、ファイルパスをStringとして作成できます。

String.joinメソッドを試してみましょう。

String[] pathNames = { "path1", "path2", "path3" };
String path = String.join(File.pathSeparator, pathNames);

ここでは、Windowsでコードをテストします。

assertEquals("path1;path2;path3", path);

また、ファイルパスはLinuxとMacでは異なって見えます。

assertEquals("path1:path2:path3", path);

同様に、StringJoinerクラスを使用できます。

public static StringJoiner buildPathUsingStringJoiner(String path1, String path2) {
    StringJoiner joiner = new StringJoiner(File.pathSeparator);
    joiner.add(path1);
    joiner.add(path2);
    return joiner;
}

MicrosoftWindowsでコードをテストしてみましょう。

assertEquals("path1;path2", buildPathUsingStringJoiner("path1", "path2"));

また、MacとUnixでは動作が異なります。

assertEquals("path1:path2", buildPathUsingStringJoiner("path1", "path2"));

4. 結論

この短い記事では、システム固有のファイルセパレータを使用してパスを構築し、コードが複数のオペレーティングシステムで機能するようにする方法を学びました。

組み込みクラスPathおよびFileを使用してファイルパスを作成する方法と、String連結で使用するために必要なセパレーターを取得する方法を確認しました。ユーティリティ。

いつものように、サンプルコードはGitHubから入手できます。