八、File类和递归

8.1 概述

java.io.File 类时文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和产出等操作。

8.2 构造方法

  • public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。

  • public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的 File实例。

  • public File(File parent, String child) :从父抽象路径名和子路径名字符串创建新的 File实例。

    // 文件路径名
    String pathname = "D:\\aaa.txt";
    File file1 = new File(pathname); // 文件路径名
    String pathname2 = "D:\\aaa\\bbb.txt";
    File file2 = new File(pathname2); // 通过父路径和子路径字符串
    String parent = "d:\\aaa";
    String child = "bbb.txt";
    File file3 = new File(parent, child); // 通过父级File对象和子路径字符串
    File parentDir = new File("d:\\aaa");
    String child = "bbb.txt";
    File file4 = new File(parentDir, child);
     
     
     
    17
     
     
     
     
     
    1
    // 文件路径名
    2
    String pathname = "D:\\aaa.txt";
    3
    File file1 = new File(pathname); 
    4
    
    
    5
    // 文件路径名
    6
    String pathname2 = "D:\\aaa\\bbb.txt";
    7
    File file2 = new File(pathname2); 
    8
    
    
    9
    // 通过父路径和子路径字符串
    10
     String parent = "d:\\aaa";
    11
     String child = "bbb.txt";
    12
     File file3 = new File(parent, child);
    13
    
    
    14
    // 通过父级File对象和子路径字符串
    15
    File parentDir = new File("d:\\aaa");
    16
    String child = "bbb.txt";
    17
    File file4 = new File(parentDir, child);
     
     

    Tips:
    1.一个File对象 代表硬盘中实际存在的一个文件或目录
    2.无论该路径下是否存在文件或者目录,都不影响File对象的创建

8.3 获取功能 的方法

  • public String getAbsolutePath() ` :返回此File的绝对路径名字符串。
  • public String getPath() :将此File转换为路径名字符串。
  • public String getName() :返回由此File表示的文件或目录的名称。
  • public long length() :返回由此File表示的文件的长度。
  • tips:

  • length() 表示文件的长度 但是 目录的长度未指定

8.4 判断功能的方法

  • public boolean exists()` :此File表示的文件或目录是否实际存在。

  • public boolean isDirectory() :此File表示的是否为目录。
  • public boolean isFile() :此File表示的是否为文件。 

notes: 创建的文件对象  必须是真实存在的  才能判断成功,如果此File表示目录,则目录必须为空才能删除。
8.5创建删除功能的方法

  • public boolean createNewFile()` :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。

  • public boolean delete() :删除由此File表示的文件或目录。            notes:当目录为空才能删除,

  • public boolean mkdir() :创建由此File表示的目录。

  • public boolean mkdirs() :创建由此File表示的目录,包括任何必需但不存在的父目录。

8.6目录的遍历

  • public String[] list() :返回一个String数组,表示该File目录中的所有子文件或目录。

  • public File[] listFiles() :返回一个File数组,表示该File目录中的所有的子文件或目录。

  • tips:

  • 调用listFile 方法的File对象 表示 的必须是实际存在的目录,否则会返回null,无法进行遍历

9、递归

9.1 概述

        自己调用自己的现象。
        递归思想顺序

9.2 举例子介绍:

    
public class DiGuiDemo {
public static void main(String[] args) {
//计算1~num的和,使用递归完成
int num = 5;
// 调用求和的方法
int sum = getSum(num);
// 输出结果
System.out.println(sum); }
/*
通过递归算法实现.
参数列表:int
返回值类型: int
*/
public static int getSum(int num) {
/*
num为1时,方法返回1,
相当于是方法的出口,num总有是1的情况
*/
if(num == 1){
return 1;
}
/*
num不为1时,方法返回 num +(num-1)的累和
递归调用getSum方法
*/
return num + getSum(num-1);
}
}
 
 
 
30
 
 
 
 
 
1
public class DiGuiDemo {
2
public static void main(String[] args) {
3
//计算1~num的和,使用递归完成
4
int num = 5;
5
      // 调用求和的方法
6
int sum = getSum(num);
7
      // 输出结果
8
System.out.println(sum);
9

10
}
11
  /*
12
    通过递归算法实现.
13
    参数列表:int 
14
    返回值类型: int 
15
  */
16
public static int getSum(int num) {
17
      /* 
18
         num为1时,方法返回1,
19
         相当于是方法的出口,num总有是1的情况
20
      */
21
if(num == 1){
22
return 1;
23
}
24
      /*
25
          num不为1时,方法返回 num +(num-1)的累和
26
          递归调用getSum方法
27
        */
28
return num + getSum(num-1);
29
}
30
}
 
 
        tips:
                递归调用保证:1.能够停止下来,有次数限制,否则会发生栈内存溢出
public class DiGuiDemo2 {
public static void main(String[] args) {
// 创建File对象
File dir = new File("D:\\aaa");
// 调用打印目录方法
printDir(dir);
} public static void printDir(File dir) {
// 获取子文件和目录
File[] files = dir.listFiles();
// 循环打印
/*
判断:
当是文件时,打印绝对路径.
当是目录时,继续调用打印目录的方法,形成递归调用.
*/
for (File file : files) {
// 判断
if (file.isFile()) {
// 是文件,输出文件绝对路径
System.out.println("文件名:"+ file.getAbsolutePath());
} else {
// 是目录,输出目录绝对路径
System.out.println("目录:"+file.getAbsolutePath());
// 继续遍历,调用printDir,形成递归
printDir(file);
}
}
}
}
 
 
 
x
 
 
 
 
 
1
public class DiGuiDemo2 {
2
    public static void main(String[] args) {
3
      // 创建File对象
4
        File dir  = new File("D:\\aaa");
5
      // 调用打印目录方法
6
        printDir(dir);
7
    }
8

9
    public static void  printDir(File dir) {
10
      // 获取子文件和目录
11
        File[] files = dir.listFiles();
12
      // 循环打印
13
      /*
14
        判断:
15
        当是文件时,打印绝对路径.
16
        当是目录时,继续调用打印目录的方法,形成递归调用.
17
      */
18
        for (File file : files) {
19
    // 判断
20
            if (file.isFile()) {
21
              // 是文件,输出文件绝对路径
22
                System.out.println("文件名:"+ file.getAbsolutePath());
23
            } else {
24
              // 是目录,输出目录绝对路径
25
                System.out.println("目录:"+file.getAbsolutePath());
26
              // 继续遍历,调用printDir,形成递归
27
                printDir(file);
28
            }
29
        }
30
    }
31
}
 
 

9.3 文件过滤器优化

java.io.FileFilter 是一个接口,是File的过滤器。该接口的对象可以传递给File类的listFiles(FileFilter) 作为参数,接口中只有一个方法,
        boolean accept(File pathname): 测试pathanme 是否应该包含当前File目录中,符合则返回true
        简单介绍
                1.接口作为参数,需要传递子类对象,重写其中方法。我们选择匿名内部类方式,比较简单。
                2.accept 方法,参数为File,表示当前 File 下所有的子类文件和子目录。保留住 则返回true,过滤掉则返回false。保留规则:
                        ①要么是 . java文件
                        ② 要么是目录 ,用于继续遍历。
                3.通过过滤器的作用,listFiles(FileFilter)返回的数组元素中,子文件对象都是符合条件的,可以直接打印
        代码实现部分:
        
public class DiGuiDemo4 {
public static void main(String[] args) {
File dir = new File("D:\\aaa");
printDir2(dir);
} public static void printDir2(File dir) {
// 匿名内部类方式,创建过滤器子类对象
File[] files = dir.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.getName().endsWith(".java")||pathname.isDirectory();
}
});
// 循环打印
for (File file : files) {
if (file.isFile()) {
System.out.println("文件名:" + file.getAbsolutePath());
} else {
printDir2(file);
}
}
}
}
 
 
 
24
 
 
 
 
 
1
public class DiGuiDemo4 {
2
    public static void main(String[] args) {
3
        File dir = new File("D:\\aaa");
4
        printDir2(dir);
5
    }
6
  
7
    public static void printDir2(File dir) {
8
      // 匿名内部类方式,创建过滤器子类对象
9
        File[] files = dir.listFiles(new FileFilter() {
10
            @Override
11
            public boolean accept(File pathname) {
12
                return pathname.getName().endsWith(".java")||pathname.isDirectory();
13
            }
14
        });
15
      // 循环打印
16
        for (File file : files) {
17
            if (file.isFile()) {
18
                System.out.println("文件名:" + file.getAbsolutePath());
19
            } else {
20
                printDir2(file);
21
            }
22
        }
23
    }
24
}  
 
 
        Lambda优化
        
public static void printDir3(File dir) {
// lambda的改写
File[] files = dir.listFiles(f ->{
return f.getName().endsWith(".java") || f.isDirectory();
}); // 循环打印
for (File file : files) {
if (file.isFile()) {
System.out.println("文件名:" + file.getAbsolutePath());
} else {
printDir3(file);
}
}
}
 
 
 
 
 
 
 
 
 
1
public static void printDir3(File dir) {
2
  // lambda的改写
3
    File[] files = dir.listFiles(f ->{ 
4
      return f.getName().endsWith(".java") || f.isDirectory(); 
5
    });
6

7
// 循环打印
8
    for (File file : files) {
9
        if (file.isFile()) {
10
            System.out.println("文件名:" + file.getAbsolutePath());
11
      } else {
12
        printDir3(file);
13
      }
14
    }
15
}
 
 
 
 
 
 
 
 
 
 
 

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

 
 
 
 

JavaFile类和递归的更多相关文章

  1. File类、递归

    File类.递归 1.1File类概述 java.io.File表示文件和目录路径名的抽象类.可以对文件和文件夹进行创建删除.获取.判断.遍历等功能. 1.2路径\文件分割符,相对路径绝度路径 1.2 ...

  2. 01 语言基础+高级:1-8 File类与IO流_day08【 File类、递归】

    day08[File类.递归] 主要内容 File类 递归 教学目标 能够说出File对象的创建方式 能够说出File类获取名称的方法名称 能够说出File类获取绝对路径的方法名称 能够说出File类 ...

  3. 343 day08File类、递归

    day08[File类.递归] 主要内容 File类 递归 教学目标 [ ] 能够说出File对象的创建方式 [ ] 能够说出File类获取名称的方法名称 [ ] 能够说出File类获取绝对路径的方法 ...

  4. 黑马程序员——JAVA基础之File类,递归,打印流,合并切割流

    ------- android培训.java培训.期待与您交流! ---------- File类 用来将文件或者文件夹封装成对象 方便对文件与文件夹的属性信息进行操作. File对象可以作为参数传递 ...

  5. Java基础---Java---IO流-----File 类、递归、删除一个带内容的目录、列出指定目录下文件夹、FilenameFilte

    File 类 用来将文件或者文件夹封装成对象 方便对文件与文件夹进行操作. File对象可以作为参数传递给流的构造函数 流只用操作数据,而封装数据的文件只能用File类 File类常见方法: 1.创建 ...

  6. 递归算法,如何把list中父子类对象递归成树

    以前写代码for循环写的多,递归除了在大学学习以外,真没怎么用过! 最近项目中使用到了关于族谱排列的问题,就是怎么把数据库里的多个子父类people对象,在界面中用树的结构展示出来 假设数据库中peo ...

  7. 结合File类浅析递归的使用

    递归算法就是方法自身直接或者间接地调用到了自身,它是一种写起来很简单,但理解起来不那么简单的算法. 一个功能在被重复地调用,并且运算的结果和上一次的调用有关, 这种时候,可以使用递归. * 注意: * ...

  8. File类,递归

    File类 File文件和目录路径名的抽象表示形式.即,Java中把文件或者目录(文件夹)都封装成File对象. File类包含     路径    path E:\...     目录 direct ...

  9. JavaSE_11_File类、递归

    1.1 概述File类 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. 1.2 构造方法 public File(String pathname ...

随机推荐

  1. liMarquee – jQuery无缝滚动插件(制作跑马灯效果)

    liMarquee 是一款基于 jQuery 的无缝滚动插件,类似于 HTML 的 marquee 标签,但比 marquee 更强大.它可以应用于任何 Web 元素,包括文字.图像.表格.表单等元素 ...

  2. Delphi 7~XE系列升级安装Indy10.6

    由于低版本Indy无法满足网络技术的日益更新,如SSL/TLS请求.RawHeaders与Cookie管理等问题处理. 我本身一直在用Delphi 2007,因为D2009开始底层的编码已不同,旧项目 ...

  3. 20155209 Exp5 MSF基础应用

    Exp5 MSF基础应用 实验准备 在实验之前,上网搜集了很多有关Metasploit渗透测试的资料.对这次实验影响最大的是一篇最受欢迎的10个Metasploit模块和插件.排名第一位的是MSB-M ...

  4. 2017-2018-2 20155224 『网络对抗技术』Exp9:Web安全基础

    实验完成情况 共完成11题 准备工作 在浏览器输入localhost:8080/WebGoat打开webgoat,左侧选择题目 右键选择Inspect Element开始调试 Injection Fl ...

  5. 2017-2018-2 20155233『网络对抗技术』Exp6:信息收集与漏洞扫描

    通过DNS和IP挖掘目标网站的信息 whois查询:用来进行域名注册信息查询,以得到3R注册信息,包括注册人的名字.组织.城市等信息.(进行whois查询时去掉www等前缀,因为注册域名时通常会注册一 ...

  6. 赚钱的小生意,VC对你没兴趣

    创业者,赚钱的生意就不要去找VC(风险投资)了,因为人家对你的生意没有兴趣. 无论是创业者,VC,股权投资散户,都需要对一个"生意"的规模有个总体的认识. 就"生意&qu ...

  7. EZ 2018 02 26 NOIP2018 模拟赛(一)

    这次是校内OJ(HHHOJ)线上比赛,网址:http://211.140.156.254:2333/contest/51 (我去刚刚快写完了手贱关掉了) 这次总体难度也不高,T1&&T ...

  8. 汇编 XOR运算

     XOR运算  按位异或^ 一.按位异或^ 运算符^ 1^1=0;0^0=0; //相同则为0 0^1=1;1^0=1; //不相同为1 1101^0110=1011; // asm_XOR.c ...

  9. TMS320VC5509驱动AT24C02

    1. 刚开始的波形不太对,比如如下代码 i2c_status = I2C_write( at24c02_write_buf, //pointer to data array , //length of ...

  10. [BZOJ3809]Gty的二逼妹子序列[莫队+分块]

    题意 给出长度为 \(n\) 的序列,\(m\) 次询问,每次给出 \(l,r,a,b\) ,表示询问区间 \([l,r]\) 中,权值在 \([a,b]\) 范围的数的种类数. \(n\leq 10 ...