本程序用于获取文件或目录的大小。
递归方式:
package Recursive;
import java.io.File;
import java.util.Scanner;
public class DirectorySize {
public static void main(String[] args) {
System.out.print("Enter a directory or a file: ");
File file = new File(new Scanner(System.in).nextLine());
System.out.println(getSize(file) + " bytes");
}
/** 返回文件大小 */
public static long getSize(File file) {
long size = 0; //文件大小
if (file.isFile()) //如果是文件,size加上文件长度
size += file.length();
else { //否则
File[] files = file.listFiles(); //目录获取文件数组
for (int i = 0; files != null && i < files.length; i++)
size += getSize(files[i]); //递归调用本方法
}
return size;
}
}
非递归方式:
package Recursive;
import java.io.File;
import java.util.LinkedList;
import java.util.Scanner;
public class Exercise18_28 {
public static void main(String[] args) {
System.out.print("Enter a directory or a file: ");
File file = new File(new Scanner(System.in).nextLine());
System.out.println(getSize(file) + " bytes");
}
/** 返回文件大小 */
public static long getSize(File file) {
long size = 0; //文件大小
LinkedList<File> linkedList = new LinkedList<>(); //链表
if (file.isFile()) //如果是文件
size += file.length();
else { //如果是目录
linkedList.addFirst(file); //添加目录到链表
while (linkedList.size() > 0) {
for (File file1 : linkedList.removeFirst().listFiles()) //遍历移除的目录
if (file1.isDirectory()) //如果是目录,加入链表
linkedList.addFirst(file1);
else
size += file1.length(); //否则,加上文件长度
}
}
return size;
}
}