JAVA I/O (二)

如何通過文件的遞歸來實現獲取指定文件的大小
一、聲明類FileTools
public class FileTools {
    /**
     * 返回文件的大小
     * @param file 文件或目錄對象
     * @return 文件的字節數
     */
    public static long getLength(File file) throws MyExcelption {
        if(!file.exists()){
            throw new MyExcelption("文件不存在!");
        } else {
            //文件存在則返回文件大小
            return getFileLen(file);
        }
    }




    /**
     * 返回文件的大小
     * @param file 文件或目錄的名稱
     * @return 文件大小的字節數
     */
    public static long getLength(String file) throws MyExcelption, IOException {
        File f = new File(file);
        if(!f.exists()){
            throw new MyExcelption(f.getCanonicalPath() +"文件不存在!");
        } else {
            //文件存在則返回文件的大小
            return getFileLen(f);
        }
    }


    /**
     * 內部獲取文件大小的方法
      * @param file
     * @return
     */
    private static long getFileLen(File file){
        long len = 0;
        if(file.isFile()){
            len = file.length();
        }
        else if(file.isDirectory()) {
            //如果是目錄,則需要把它下面的所有文件的大小累加起來
            //獲取dir下的所有下一級文件
            File[] files = file.listFiles();
            for (File f : files) {
                len += getFileLen(f);
            }
        }
        return len;
    }
}


/**
* 內部自定義異常類
*/
class MyExcelption extends Exception{
    private String Message;
    MyExcelption(String Msg){
        this.Message = Msg;
    }


    @Override
    public void printStackTrace() {
        System.err.println(Message);
        //super.printStackTrace();
    }
}

 

 
靜態方法getLength()可以接收兩種類型的參數:File對象;File文件的全路徑名
當傳入的不是一個已經存在的文件,則會觸發自定義的異常類,拋出”文件不存在“的異常提示信息
上面代碼中關鍵步驟:
  1. 判斷指定的文件是否存在,如果不存在則”拋出異常“
  2. 判斷指定的文件是否爲文件,如果是文件則直接調用File類中的length()方法獲取文件對應的字節大小並存儲在臨時變量中
  3. 判斷指定的文件是否爲目錄,如果是目錄則遍歷出其下一級的文件遞歸調用自身方法,並在獲取到文件小時做臨時變量的累加
  4. 遍歷完成後則返回最終存儲文件字節大小的臨時變量
 
二、測試類
public class Testio02 {
    public static void main(String[] args) {
        File f = new File("D:/projects");


        try {
            try {
                System.out.println((f.isDirectory()?"目錄:":"文件:") + f.getCanonicalPath() + "的大小爲:" + FileTools.getLength(f) + "字節");
            } catch (MyExcelption myExcelption) {
                myExcelption.printStackTrace();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }




        String file_str = "D:/download1";
        try {
            try {
                System.out.println(file_str + "的大小爲:" + FileTools.getLength(file_str) + "字節");
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (MyExcelption myExcelption) {
            myExcelption.printStackTrace();
        }


    }
}

 

測試類中使用兩種傳參的方式去調用獲取文件字節大小的getLength方法
返回的結果如下:
目錄:D:\projects的大小爲:839543061字節
D:\download1文件不存在!
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章