目前Java獲取文件大小的方法有兩種:
1、通過file的length()方法獲取;
2、通過流式方法獲取;
通過流式方法又有兩種,分別是舊的java.io.*中FileInputStream的available()方法和新的java..nio.*中的FileChannel
length方法:
1 /** 2 * 獲取文件大小(字節byte) 3 * 方式一:file.length() 4 */ 5 public void getFileLength(File file){ 6 long fileLength = 0L; 7 if(file.exists() && file.isFile()){ 8 fileLength = file.length(); 9 } 10 System.out.println("文件"+file.getName()+"的大小為:"+fileLength+"byte"); 11 }
available方法:
1 /** 2 * 獲取文件大小 3 * 方式二:FileInputStream.available() 4 * 注意:int類型所能表示的最大值2^31-1,如果文件的大小超過了int所能表示的最大值結果會有誤差 5 * @throws IOException 6 */ 7 public void getFileLength2(File file) throws IOException{ 8 int length = 0; 9 FileInputStream fis = null; 10 if(file.exists() && file.isFile()){ 11 fis = new FileInputStream(file); 12 length = fis.available(); 13 } 14 System.out.println("文件"+file.getName()+"的大小為:"+length+"byte"); 15 }
FileChannel方法:
1 /** 2 * 獲取文件大小 3 * 方式一:FileInputStream.getChannel() 4 * @throws IOException 5 */ 6 public void getFileLength3(File file) throws IOException{ 7 FileInputStream fis = null; 8 FileChannel fileChannel = null; 9 if(file.exists() && file.isFile()){ 10 fis = new FileInputStream(file); 11 fileChannel = fis.getChannel(); 12 } 13 System.out.println("文件"+file.getName()+"的大小為:"+fileChannel.size()+"byte"); 14 }
總結java獲取文件大小:
1、三種方法獲取小文件(300M以下)時結果一致,但是與windows顯示的值有一定誤差;
2、獲取大文件時,為避免文件長度大於方法返回值類型的最大值,盡量使用length或FileChannel方法獲取;
