如何通过文件的递归来实现获取指定文件的大小
一、声明类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文件的全路径名
当传入的不是一个已经存在的文件,则会触发自定义的异常类,抛出”文件不存在“的异常提示信息
上面代码中关键步骤:
-
判断指定的文件是否存在,如果不存在则”抛出异常“
-
判断指定的文件是否为文件,如果是文件则直接调用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();
}
}
}
测试类中使用两种传参的方式去调用获取文件字节大小的getLength方法
返回的结果如下:
目录:D:\projects的大小为:839543061字节
D:\download1文件不存在!