web-dev-qa-db-ja.com

File.separator vs FileSystem.getSeparator()vs System.getProperty( "file.separator")?

プラットフォームに依存した「ファイル区切り」をプラットフォームに依存せずに取得する3つの方法identicalがあるようです。

どれをいつ使用するかをどのように決定しますか?

それらの間に何か違いはありますか?

122
Pacerier

System.getProperties()は、System.setProperty(String key, String value)の呼び出し、またはコマンドラインパラメーター-Dfile.separator=/でオーバーライドできます。

File.separatorは、デフォルトのファイルシステムの区切り文字を取得します。

FileSystems.getDefault()は、デフォルトのファイルシステムを取得します。

FileSystem.getSeparator()は、ファイルシステムの区切り文字を取得します。インスタンスメソッドとして、これを使用して、1つのJVM内の複数のファイルシステムでコードを操作する必要がある場合に、デフォルト以外のコードに異なるファイルシステムを渡すことができます。

130
Bringer128

コードがファイルシステムの境界を越えない場合、つまり、1つのファイルシステムで作業している場合は、Java.io.File.separatorを使用します。

これにより、説明したように、FSのデフォルトのセパレータが取得されます。 Bringer128が説明したように、System.getProperty("file.separator")はコマンドラインオプションを介してオーバーライドでき、Java.io.File.separatorほどのタイプセーフではありません。

最後のJava.nio.file.FileSystems.getDefault().getSeparator();はJava 7で導入されたため、古いJavaバージョン間でコードを移植可能にする場合は、今のところ無視してもかまいません。

したがって、これらのオプションはすべて他のオプションとほとんど同じですが、完全ではありません。ニーズに合ったものを選択してください。

29
darioo