テストステ論

高テス協会会長が, テストステロンに関する情報をお届けします.

java.io.Fileを使うのはやめましょう. java.nio.file.Pathを使いましょう

FileもPathも, ファイルシステム上のノードを表しているには違いないのだが, 大きな違いがある. 前者が, デフォルトファイルシステム(そのOSのローカルファイルシステムのこと)中のノードを表しているのに対して, 後者がもっと抽象的な仮想ノードを表していることだ. 実際, Fileは具象だが, Pathはinterfaceである. Pathは, Fileの設計失敗を反省して設計された.

NIO2のFilesystem, FilesystemProviderはまさに, 抽象的なファイルシステムを表すためにある. これらは, FUSEに似ている. だから, FUSEにあるように, S3をバックエンドにしたファイルシステムなども実装可能である.

今日のTip:

  • 新しく作るコードでは, Pathを使うべき
  • File#toPathは使ってもいいが, Path#toFileを使うとファイルシステムがデフォルトに固定されることになる. これは以下のような問題を生む. 結果, デフォルトファイルシステムに依存したコードが混入している可能性を排除出来なくなる. ポータビリティをあげたいのであれば, Pathを使わなければいけない.