プラットフォームに依存する「ファイル区切り」をプラットフォームに依存しないようにする方法は3つあるようです。
いつどれを使用するかをどのように決定しますか?
それらの間にも違いはありますか?
プラットフォームに依存する「ファイル区切り」をプラットフォームに依存しないようにする方法は3つあるようです。
いつどれを使用するかをどのように決定しますか?
それらの間にも違いはありますか?
回答:
System.getProperties()
System.setProperty(String key, String value)
コマンドラインパラメータの呼び出しまたはコマンドラインパラメータを使用してオーバーライドできます。-Dfile.separator=/
File.separator
デフォルトのファイルシステムのセパレーターを取得します。
FileSystems.getDefault()
デフォルトのファイルシステムを取得します。
FileSystem.getSeparator()
ファイルシステムの区切り文字を取得します。インスタンスメソッドとして、1つのJVM内の複数のファイルシステムでコードを操作する必要がある場合に、これを使用して、デフォルト以外のコードにさまざまなファイルシステムを渡すことができます。
FileSystem
扱ったファイルシステムごとに異なるインスタンスを持っているでしょう。
コードがファイルシステムの境界を越えない場合、つまり1つのファイルシステムで作業している場合は、を使用しますjava.io.File.separator
。
これにより、説明したように、FSのデフォルトのセパレータが得られます。Bringer128で説明したように、System.getProperty("file.separator")
コマンドラインオプションでオーバーライドでき、ほどタイプセーフではありませんjava.io.File.separator
。
最後の1つjava.nio.file.FileSystems.getDefault().getSeparator();
はJava 7で導入されたので、コードを古いJavaバージョン間で移植可能にしたい場合は、今のところ無視することもできます。
したがって、これらのオプションはどれも他のものとほとんど同じですが、完全ではありません。ニーズに合ったものを選択してください。
java.io
のために廃止java.nio
?
java.io
はと比べて少し低いレベルですがjava.nio
、それでも非常に広く有用です。違いは、blogs.oracle.com / slc / entry / javanio_vs_javaioで確認できます。nio
は置き換えられません。io
複数の方法で拡張されます(io
内部で使用されます)。