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();
}
}
-
判斷指定的文件是否存在,如果不存在則”拋出異常“
-
判斷指定的文件是否爲文件,如果是文件則直接調用File類中的length()方法獲取文件對應的字節大小並存儲在臨時變量中
-
判斷指定的文件是否爲目錄,如果是目錄則遍歷出其下一級的文件遞歸調用自身方法,並在獲取到文件小時做臨時變量的累加
-
遍歷完成後則返回最終存儲文件字節大小的臨時變量
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();
}
}
}