2011-08-29 13 views

答えて

5

JDK 7のjava.nio.file.Filesクラスは、ファイルに対して動作する静的メソッドを提供するクラスです。

Files.size(String path)メソッドは、java.nio.file.spi.FileSystemProviderに基づいてファイルサイズを返します。 File.length()とは関係ありません。これは実際に "接続されている"実際のファイルサイズを返します。

17

主な違いは、Files.size()は「通常ファイル」でないもの(Files.isRegularFile()で定義)を処理できることです。

この

FileSystemProvidersあなたが利用できる持っているに応じて、... ZIPファイル内のファイルのサイズ、FTP/SFTP経由でアクセスしたファイルを処理できる可能性を得ることができることを意味

プレーン古いFile.length()はそれを行うことはできません。 は、 "本物の"ファイル(つまり、基礎となるOSがファイルとしても扱うファイル)を扱います。

1

重要な違いは、何かがうまくいかない場合File.length()は、単にので、私はそれゆえFiles.size()を使用することをお勧めします0を返すながらFiles.size()は、IOExceptionがスローということである:それは空のファイルとエラーを区別することはできません

  • どちらの場合も0を返すため、File.length()で発生します。
  • エラーが発生した場合は、File.length()でエラーの原因に関する情報は得られません。対照的に、Files.size()からスローされたIOExceptionには、一般に、失敗の原因を示すメッセージが含まれます。

this answerで説明したようにFile.length()のみご使用のオペレーティング・システムによって公開された「通常の」ファイルシステムと連携しながら、さらに、Files.size()は、(例えば、ZIPまたはFTPファイルシステムの)任意のファイル・システム・プロバイダと連携することができます。

結論:一般的に、より新しいFilesクラスのメソッドを、従来のFileクラスよりも優先します。