系列文章目录

前言

文件夹/目录 不同于文件

一、

文件夹/目录它不同于文件,因为文件夹中可以放文件,或下一级文件夹。

(1)获取文件夹的下一级

String[] list();得到下一级文件或目录的名称

File[] listFiles():得到下一级文件或目录的File对象

00022.02 目录的递归操作(包含怎么删除文件、删除文件夹等知识)_File


00022.02 目录的递归操作(包含怎么删除文件、删除文件夹等知识)_删除文件_02


如果对下一级还要进行操作

00022.02 目录的递归操作(包含怎么删除文件、删除文件夹等知识)_Test_03


00022.02 目录的递归操作(包含怎么删除文件、删除文件夹等知识)_File_04


这样就引入了我们的递归

你给我一个文件夹,我给你列出它所有的子集

00022.02 目录的递归操作(包含怎么删除文件、删除文件夹等知识)_递归_05


然后调用,这样就会把所有文件给你列出来

00022.02 目录的递归操作(包含怎么删除文件、删除文件夹等知识)_IO_06


00022.02 目录的递归操作(包含怎么删除文件、删除文件夹等知识)_IO_07


(2)求一个目录的总大小

00022.02 目录的递归操作(包含怎么删除文件、删除文件夹等知识)_IO_08

(3)删除一个包含子目录,子文件的文件夹

[注意] 演示删除操作的时候,不要勿删文件,最好新建一个文件夹来测试

删除要写得完美,也需要用到递归

00022.02 目录的递归操作(包含怎么删除文件、删除文件夹等知识)_File_09

二、代码

package com.atguigu.test01;

import java.io.File;

import org.junit.Test;

public class Test02Dir {
@Test
public void test04(){
File dir = new File("d:/演示文件夹");
deleteDir(dir);
}
public void deleteDir(File file){
//(1)如果是文件夹,先把它的下一级删除
if(file.isDirectory()){
File[] listFiles = file.listFiles();
//经过这个foreach循环,可以把file的所有的下一级删除
for (File sub : listFiles) {
deleteDir(sub);
}
}

//文件夹就变成了空文件夹,就可以直接删
//如果是文件也可以直接删除
file.delete();
}

@Test
public void test03(){
File dir = new File("D:/尚硅谷_190513班_柴林燕_JavaSE/笔记");
long size = getSize(dir);
System.out.println(size);
}

public long getSize(File file){
if(file.isFile()){
return file.length();
}else if(file.isDirectory()){
long sum = 0;
File[] listFiles = file.listFiles();
for (File sub : listFiles) {
sum += getSize(sub);//累加每一个下一级的大小
}
return sum;
}
return 0;
}

@Test
public void test02(){
File dir = new File("D:/尚硅谷_190513班_柴林燕_JavaSE/笔记");
listAllSub(dir);
}

//listAllSub()方法的功能是列出一个文件或一个目录及它的下一级
public void listAllSub(File dir){
if(dir.isDirectory()){
File[] listFiles = dir.listFiles();
for (File sub : listFiles) {//sub可能是一个文件,也可能是一个文件夹
listAllSub(sub);//递归:自己调用自己
}
}
System.out.println(dir);
}


@Test
public void test01(){
File dir = new File("D:/尚硅谷_190513班_柴林燕_JavaSE/笔记");

String[] list = dir.list();
for (String sub : list) {
System.out.println(sub);
}
}
}