2011-08-29 152 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()不能做任何。它只有只有處理「真實」文件(即底層操作系統作爲文件處理的文件)。

1

的一個重要區別是,Files.size()拋出IOException如果出現錯誤,而File.length()只是返回0。因此,我要建議使用Files.size()因爲:

  • 這是不可能的空文件,錯誤區分發生在File.length(),因爲它在兩種情況下都會返回0。
  • 如果發生錯誤,您將無法通過File.length()獲取有關錯誤原因的任何信息。相比之下,從Files.size()拋出的IOException通常會包含指示失敗原因的消息。

此外,如this answer描述,Files.size()可以與任何文件系統供應商(例如,對於ZIP或FTP文件系統)工作,同時File.length()只與你的操作系統暴露的「常規」文件系統的工作原理。

結論:總體而言,更喜歡新的Files類的方法而不是傳統的File類。