Part01:File类

1、File类

  • 是文件和目录路径名的抽象表示;
  • 文件:可以直接保存数据;
  • 目录路径名(文件夹):分类管理文件;

2、File类构造方法:

  • File(File parent, String child) //父文件,子路径
    File file2 = new File("~/Desktop/Java进阶");
    File file3 = new File(file2,“Day10”);
  • File(String pathname)//路径名
    File file = new File("~/Desktop/Java进阶/Day10");
  • File(String parent, String child) //父路径,子路径
    File file1 = new File("~/Desktop/Java进阶",“Day10”);

3、File类的获取方法:

  • public String getAbsolutePath( );//获取绝对路径
  • public String getName( );//获取当前File对象的名字
  • public String getPath( );//获取创建File对象时传递的路径
  • public long length( );//获取表示文件的File对象占用的字节数,如果是文件夹的File对象,返回值不确定

4、File对象的删除、判断和创建方法

  • 创建方法
  • 创建文件:public boolean createNewFile( );//只能创建文件,返回是否创建成功(若文件已存在则创建失败)
  • 创建文件夹:public boolean mkdir( );//只能创建文件夹,返回是否创建成功(若文件夹已存在则创建失败)
  • 判断方法
  • 判断是否是文件:public boolean isFile( );//返回是否是文件
  • 判断是非是文件夹:public boolean isDirectory( );//返回是否是文件夹
  • 判断文件或文件夹是否存在:public boolean exists( );//返回File对象是否存在
  • 删除方法
  • 删除文件或者文件夹:public boolean delete( );//删除的是单个文件或者是空文件夹,不经过回收站,返回是否删除成功

5、File类的list和listFile方法

  • public String[ ] list( );//列出一个文件夹下的所有东西,以字符串数组形式返回,只返回文件的名字
  • public File[ ] listFiles( );//列出一个文件夹下的所有东西,以文件数组形式返回,返回文件的绝对路径

注意⚠️:

  • 只能列出当前文件夹下的一级子文件和子文件夹
  • 指定的目录必须是存在的
  • 指定的必须是目录
    (否则容易返回数组为null,再使用这个数组时会出现空指针异常(NullPointException))

拓展:若想删除一个非空文件夹下的所有文件
可通过listFiles方法获取该文件夹下的所有文件,然后遍历这个文件数组,在遍历的过程中删除文件;

File[] files = file.listFiles();
for (File f:files
     ) {
    //System.out.println(f);
    boolean b = f.delete();
    //System.out.println(b);
}

Part02:递归

1、递归:

  • 是一个通用技术;
  • 所有编程语言,只要有方法的概念的编程语言都具有递归;
  • 指的是在一个方法内部,再调用方法本身
    注意⚠️:无限递归本身是错误的:因为方法运行需要进栈,而栈空间不是无限大的;多次递归之后会容易出现栈内存溢出(StackOverflowError)

2、使用递归的前提:

  • 必须有一个可以使递归结束的条件
  • 递归的次数不能太多
  • 构造方法禁止使用递归
public static void main(String[] args){
  test(5);
}
public static void test(int num){
  if(num<0){
      return;
  }
  System.out.println("test...");
  num--;
  test(num);
}

⚠️建议在开发中,能不用递归就不用递归,因为递归急剧消耗内存;

3、递归的分类:

  • 直接递归:在A方法的内部,直接调用A方法;
  • 间接递归:在A方法的内部调用B方法,在B方法的内部调用C方法,在C方法的内部调用A方法 ;

4、递归的练习:

  • 使用递归求和:1+2+3+4+…+n
public static int getSum(int n){
  if(n==1){
      return n;
  }
 return getSum(n-1)+n;
}
  • 使用递归遍历文件夹下的所有文件(包括一级的也包括n级的)
public static void main(String[] args){
  File file = new File("/Users/feng/Desktop/Java进阶/Day04");
  DiGuiFile(file);
}
//列出一个文件夹下的文件
public static void DiGuiFile(File file){
  File[] files = file.listFiles();
  //遍历该文件夹下的所有文件
  for(File f:files
       ) {
     //判断是否为文件夹,若为文件夹,接着列出该文件夹下的所有文件
      if(f.isDirectory()){
          DiGuiFile(f);
      }
      System.out.println(f);
  }
}

Part03:文件过滤器

1、文件过滤器FileFilter:
在list和listFiles方法中使用;

列出以.txt结尾的文件:

//过滤器类实现FileFilter接口
public class MyFileFilter implements FileFilter {
    @Override
    //重写过滤条件
    public boolean accept(File pathname) {
        if(pathname.getName().endsWith(".txt")){
            return true;
        }
        return false;
    }
}
//使用
public class FileFilterDemo {
    public static void main(String[] args){
        File file = new File("/Users/feng/Desktop/Java进阶/Day10");
        MyFileFilter myFileFilter = new MyFileFilter();
        File[] files = file.listFiles(myFileFilter);
        for (File f:
             files) {
            System.out.println(f);
        }
    }
}

Part04:嵌套Map集合的遍历

public class MapDiGuiDemo {
    public static void main(String[] args){
        //第一个学院的学生姓名和学号
        Map<String,String> eeMap = new LinkedHashMap<String, String>();
        eeMap.put("001","张三");
        eeMap.put("002","李四");
        eeMap.put("003","王五");
        //第二个学院的学生姓名和学号
        Map<String,String> uiMap = new LinkedHashMap<String, String>();
        uiMap.put("001","小明");
        uiMap.put("002","小红");
        uiMap.put("003","小米");
        //第三个学院的学生姓名和学号
        Map<String,String> ppMap = new LinkedHashMap<String, String>();
        ppMap.put("001","老王");
        ppMap.put("002","道长");
        ppMap.put("003","小四");
        //把这三个学院放入一个Map集合中
        Map<String,Map<String,String>> zMap = new LinkedHashMap<String,Map<String,String>>();
        zMap.put("javaee",eeMap);
        zMap.put("ui",uiMap);
        zMap.put("php",ppMap);
        //遍历这个Map集合
        Set<Map.Entry<String,Map<String,String>>> zset = zMap.entrySet();
        Iterator<Map.Entry<String,Map<String,String>>> zit = zset.iterator();
        while (zit.hasNext()){
            Map.Entry<String,Map<String,String>> entry = zit.next();
            String key = entry.getKey();
            Map<String,String> value = entry.getValue();
            //打印这个Map集合的键
            System.out.println(key);
            //遍历这个Map集合中的Map集合
            Set<String> keys = value.keySet();
            for (String k:keys
                 ) {
               String value1 =  value.get(k);
               //这个Map集合中的Map集合的键值对
               System.out.println(k+":"+value1);
            }
    }
 }
}

java中list嵌套list怎么累加_java中list嵌套list怎么累加