package com.atguigu.exer2;
import java.io.File;
/**
* 3. 遍歷指定目錄所有文件名稱,包括子文件目錄中的文件。
拓展1:並計算指定目錄佔用空間的大小
拓展2:刪除指定文件目錄及其下的所有文件
*
*/
public class ListFilesTest {
public static void main(String[] args) {
// 遞歸:文件目錄
/** 打印出指定目錄所有文件名稱,包括子文件目錄中的文件 */
// 1.創建目錄對象
File dir = new File("E:\\teach\\01_javaSE\\_尚硅谷Java編程語言\\3_軟件");
// 2.打印目錄的子文件
printSubFile(dir);
}
public static void printSubFile(File dir) {
// 打印目錄的子文件
File[] subfiles = dir.listFiles();
for (File f : subfiles) {
if (f.isDirectory()) {// 文件目錄
printSubFile(f);
} else {// 文件
System.out.println(f.getAbsolutePath());
}
}
}
// 方式二:循環實現
// 列出file目錄的下級內容,僅列出一級的話
// 使用File類的String[] list()比較簡單
public void listSubFiles(File file) {
if (file.isDirectory()) {
String[] all = file.list();
for (String s : all) {
System.out.println(s);
}
} else {
System.out.println(file + "是文件!");
}
}
// 列出file目錄的下級,如果它的下級還是目錄,接着列出下級的下級,依次類推
// 建議使用File類的File[] listFiles()
public void listAllSubFiles(File file) {
if (file.isFile()) {
System.out.println(file);
} else {
File[] all = file.listFiles();
// 如果all[i]是文件,直接打印
// 如果all[i]是目錄,接着再獲取它的下一級
for (File f : all) {
listAllSubFiles(f);// 遞歸調用:自己調用自己就叫遞歸
}
}
}
// 拓展1:求指定目錄所在空間的大小
// 求任意一個目錄的總大小
public long getDirectorySize(File file) {
// file是文件,那麼直接返回file.length()
// file是目錄,把它的下一級的所有大小加起來就是它的總大小
long size = 0;
if (file.isFile()) {
size += file.length();
} else {
File[] all = file.listFiles();// 獲取file的下一級
// 累加all[i]的大小
for (File f : all) {
size += getDirectorySize(f);// f的大小;
}
}
return size;
}
// 拓展2:刪除指定的目錄
public void deleteDirectory(File file) {
// 如果file是文件,直接delete
// 如果file是目錄,先把它的下一級幹掉,然後刪除自己
if (file.isDirectory()) {
File[] all = file.listFiles();
// 循環刪除的是file的下一級
for (File f : all) {// f代表file的每一個下級
deleteDirectory(f);
}
}
// 刪除自己
file.delete();
}
}