File
クラスには、 separator
と pathSeparator
の2つの文字列があります。
違いは何ですか?一方をもう一方に使用すべきですか。
あなたがFile.separator
とFile.pathSeparator
を意味するならば:
File.pathSeparator
は、ファイルパスのリストで個々のファイルパスを区切るために使用されます。 Windows、PATH環境変数について考えてみましょう。ファイルパスを区切るには;
を使用するので、WindowsではFile.pathSeparator
は;
になります。
File.separator
は、特定のファイルへのパスを分割するために使用される/
または\
のいずれかです。たとえばWindowsでは、\
またはC:\Documents\Test
です。
ファイルパスを作成するときには区切り記号を使用します。そのため、unixではセパレータは/
です。ですから、もしあなたがunixパス/var/temp
を構築したいのであれば、このようにします。
String path = File.separator + "var"+ File.separator + "temp"
クラスパスのようにファイルのリストを扱うときはpathSeparator
を使います。たとえば、アプリがjarのリストを引数として受け取った場合、そのリストをunixでフォーマットする標準的な方法は次のとおりです。/path/to/jar1.jar:/path/to/jar2.jar:/path/to/jar3.jar
それで、ファイルのリストを与えられて、あなたはこのような何かをするでしょう:
String listOfFiles = ...
String[] filePaths = listOfFiles.split(File.pathSeparator);
Java.io.File
クラスは4つの静的セパレータ変数を含みます。より良い理解のために、いくつかのコードの助けを借りて理解しましょう
これらはすべて最終変数であり、システムに依存します。
これらのセパレータ変数を表示するためのJavaプログラムは次のとおりです。 FileSeparator.Java
import Java.io.File;
public class FileSeparator {
public static void main(String[] args) {
System.out.println("File.separator = "+File.separator);
System.out.println("File.separatorChar = "+File.separatorChar);
System.out.println("File.pathSeparator = "+File.pathSeparator);
System.out.println("File.pathSeparatorChar = "+File.pathSeparatorChar);
}
}
Unixシステムでの上記プログラムの出力
File.separator = /
File.separatorChar = /
File.pathSeparator = :
File.pathSeparatorChar = :
Windowsシステムでのプログラムの出力:
File.separator = \
File.separatorChar = \
File.pathSeparator = ;
File.pathSeparatorChar = ;
プログラムをプラットフォームに依存しないようにするために、ファイルパスを作成したり、PATH、CLASSPATHなどのシステム変数を読み取るためにこれらの区切り文字を常に使用する必要があります。
これは、区切り文字を正しく使用する方法を示すコードスニペットです。
//no platform independence, good for Unix systems
File fileUnsafe = new File("tmp/abc.txt");
//platform independent and safe to use across Unix and Windows
File fileSafe = new File("tmp"+File.separator+"abc.txt");