栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

【文件和递归】File:创建功能,删除功能,重命名功能,判断功能,基本获取功能,高级获取功能,断有没有.png后的文件,递归:归注意事项,用代码求出实现5的阶乘,不死神兔案例,递归删除带内容的目录

【文件和递归】File:创建功能,删除功能,重命名功能,判断功能,基本获取功能,高级获取功能,断有没有.png后的文件,递归:归注意事项,用代码求出实现5的阶乘,不死神兔案例,递归删除带内容的目录

一. 文件

我们想要实现IO操作,就必须要知道硬盘上文件的表现形式
Java提供了一个类让我们操作硬盘上的文件:File
File也就是文件表现形式

1.File:文件和目录(文件夹)路径名的抽象表示。 (1) 构造方法:

    public File(String pathname)
    通过将给定的路径名字符串转换为抽象路径名来创建新的
    File实例。 如果给定的字符串是空字符串,则结果是空的抽象路径名。

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

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

public class FileDemo1 {
    public static void main(String[] args) {
        //public File(String pathname) 根据一个路径得到一个File对象
        //F:demoa.txt封装成一个File对象
        File file = new File("F:\shujia\demo\a.txt");
        System.out.println(file);


        //public File(File parent,String child)
        //父的路径:F:shujiademo
        //子路径:b.txt
    File file1 = new File("F:\shujia\demo", "b.txt");
        System.out.println(file1);



        //public File(File parent,String child)
        //父的路径:F:shujiademo
        //子路径:b.txt
        File file2 = new File("F:\shujia\demo");
        File file3 = new File(file2, "b.txt");
        System.out.println(file3);

    }
}
(2) 创建功能

    public boolean createNewFile():当且仅当具有该名称的文件尚不存在时,原子地创建一个由该抽象路径名命名的新的空文件。

    public boolean mkdir() :创建由此抽象路径名命名的目录,如果目标文件夹已经存在,就不创建了,返回false

    public boolean mkdirs():创建多级文件夹

public class FileDemo2 {
    public static void main(String[] args) {
        //需求:我想在F盘下面创建一个文件夹demo2
        //封装成File对象,不需要文件或者目录是否已经存在,它只
//是将一个路径抽象的用File表示
        //将来你可以用File类中的一些方法,来进行创建或者删除
        File file = new File("F:\test");
        System.out.println(file.mkdir());
        //public boolean mkdir() 创建由此抽象路径名命名的目
 //录,如果目标文件夹已经存在,就不创建了,返回false



        File file2 = new File("F:\test\a.txt");
        try {
     //public boolean createNewFile()当且仅当具有该名称的
     //文件尚不存在时,原子地创建一个由该抽象路径名命名的新的空文件。
            System.out.println(file2.createNewFile());
        }catch (IOException i){
            i.printStackTrace();
        }

        //public boolean mkdirs() 创建多级文件夹
     File file1 = new File("F:\dashuju\demo\demo1");
        System.out.println(file1.mkdirs());



   //注意1:要想在某个目录下创建文件,前提是该目录必须存在!!
   //此情况下该目录不存在所以就创建不了新的文件


        File file3 = new File("F:\dashuju\demo\a.txt");
       try {
           System.out.println(file3.createNewFile());
           //系统找不到指定的路径。
       }catch (IOException i){
           i.printStackTrace();
           //注意2:将来你要搞清楚是想要创建文件还是创建文件夹,
  //骑白马的不一定是王子,还有可能是唐僧
       }
    }
}
(3) 删除功能:

public boolean delete()

import java.io.File;
import java.io.IOException;


public class FileDemo3 {
    public static void main(String[] args) {
//删除一个文件
        File file = new File("F:\a.txt");

        try {
            System.out.println(file.createNewFile());
        }catch (IOException i){
            i.printStackTrace();
        }
        System.out.println(file.delete());
        
        
        
      //删除一个多级文件夹  
        File file1 = new File("aaa\bbb\ccc");
        System.out.println(file1.mkdirs());
        System.out.println(file1.delete());
  //此时只删除了ccc文件夹,要想删除aaa文件夹必须把aaa文件夹删除
  //到为空为止



        File file2 = new File("aaa\bbb");
        System.out.println(file2.delete());
        //此时又删除了bbb文件夹

         //需求:我想删除aaa这个文件夹
        //注意:要删除的目录必须是为空
        File file3 = new File("aaa");
        System.out.println(file3.delete());
        //此时把aaa文件夹删除了


    }
}
(4)重命名功能

public boolean renameTo(File dest)

将文件夹a的名字改为大数据

public class FileDemo4 {
    public static void main(String[] args) {
        File file = new File("F:\a");
        File file1 = new File("F:\大数据");
        System.out.println(file.renameTo(file1));
    }
}
(5)判断功能

public boolean isDirectory() :判断是否是文件夹
public boolean isFile():判断是否是文件
public boolean exists():判断目标文件或者文件夹是否存在
public boolean canRead():判断是否可读
public boolean canWrite():判断是否可写
public boolean isHidden():判断是否隐藏

public class FileDemo5 {
    public static void main(String[] args) {
        //public boolean isDirectory() 判断是否是文件夹
        File file = new File("F:\大数据");
        System.out.println(file.isDirectory());//true


        //public boolean isFile() 判断是否是文件
        System.out.println(file.isFile());//false


  //public boolean exists() 判断目标文件或者文件夹是否存在
        System.out.println(file.exists());//true

        //public boolean canRead() 判断是否可读
        System.out.println(file.canRead());//true

        //public boolean canWrite() 判断是否可写
        System.out.println(file.canWrite());//true

        //public boolean isHidden() 判断是否隐藏
        System.out.println(file.isHidden());//false



    }
}
(6) 基本获取功能

public String getAbsolutePath():获取绝对路径,或者说完整路径,是带盘符的路径
public String getPath():获取相对路径,不带盘符
public String getName():获取名称
public long length():获取的长度是字节数
public long lastModified(): //1645064059299 精确到毫秒
//返回的是一个时间戳:值得是你在最后一次修改文件的时间,时间戳是在1970 1月 1日开始

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;


public class FileDemo6 {
    public static void main(String[] args) {

        //public String getAbsolutePath()
        //获取绝对路径,或者说完整路径,是带盘符的路径
        File file = new File("大数据");
        System.out.println(file.getAbsolutePath());
        //F:softidea2021idea projects大数据


        //public String getPath()
        //获取相对路径,不带盘符
        System.out.println(file.getPath());//大数据


        //public String getName()
        //获取名称
        File file1 = new File("F:\大数据\a.txt");
        System.out.println(file1.getName());//a.txt


        //public long length()
        //获取的长度是字节数

        System.out.println(file1.length());//34




        //public long lastModified()
        //1645064059299  精确到毫秒
        //返回的是一个时间戳:值得是你在最后一次修改文件的时间,
    //时间戳是在1970 1月 1日开始
        System.out.println(file1.lastModified());
        //1645101188860


        //java将时间戳与日期进行转换
        //Date(long date)
        //分配一个 Date对象,并将其初始化为表示自称为“时代”的标
   //准基准时间以后的指定毫秒数,即1970年1月1日00:00:00 GMT。
        Date date = new Date(file1.lastModified());
        System.out.println(date);//Thu Feb 17 20:33:08 CST 2022
        //转换时间格式
        SimpleDateFormat sp = new SimpleDateFormat("yyyy/MM/DD EEE HH:mm:ss");
        System.out.println(sp.format(date));
        //2022/02/48 星期四 20:33:08
    }
}

结果:

(6) 高级获取功能

public String[] list()
public File[] listFiles()

public class FileDEmo7 {
    public static void main(String[] args) {
        //public String[] list()
        //获取指定目录下的所有文件和文件夹的名称组成的数组
        File file = new File("F:\dashuju\demo");
        String[] list = file.list();
        for (String list1:list){
            System.out.println(list1);}
            
            System.out.println("=============");
            //public File[] listFiles()
        //获取指定目录下的所有文件和文件夹形成的File对象数组

            File[] files = file.listFiles();
            for (File files1:files){
                System.out.println(files1);
                
            }



    }
}

结果:

(7) 需求:判断D盘下面有没有.png后的文件,如果有,就输出此文件名称
分析:     1、将D盘根目录封装成一个File对象
    2、获取该目录下所有的文件或者文件夹组成的File对象数组
    3、遍历File数组,得到每一个File对象,然后判断是否是文件
        是:继续判断是否以.jpg后缀
            是:输出名称
            不是:不管他
        不是:不管他

方法一:

public class FileDemo8 {
    public static void main(String[] args) {
        File file = new File("F:\");
        File[] files = file.listFiles();
        for (File s:files){
            if (s.isFile()){
                if (s.getName().endsWith(".png")){
                    System.out.println(s.getName());
                }
            }
        }

    }
}

方法二:判断D盘下面有没有.jpg后的文件,如果有,就输出此文件名称

分析:
1、先获取所有的文件和文件夹,然后在遍历的时候,再去判断是否是文件,是否是.jpg后缀的,最后再将满足条件的文件过滤出来获取到名称。
2、在获取的时候,获取到的数据就是满足条件的,我们直接输出就可以了。

文件名称过滤器的实现思想及代码
public String[] list(FilenameFilter filter)
public File[] listFiles(FilenameFilter filter)

import java.io.File;
import java.io.FilenameFilter;


public class FileDemo9 {
    public static void main(String[] args) {
        File file = new File("F:\");
        File[] files = file.listFiles(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                //return  false;
//                return true;
 //通过测试发现,目录下的文件或者文件夹该不该获取到,却决于这里的
 //返回值
 //true,就获取到加到数组,如果是false,就不获取,不加到数组中
//                System.out.println(dir);
//                System.out.println(name);
                File file1 = new File(dir, name);
                boolean f = file1.isFile();
                boolean b = name.endsWith(".png");
                return f && b;
            }
        });
        for (File s:files)
        System.out.println(s);
    }
}

二.递归 1、递归的概述

递归:方法定义中调用方法本身的现象

Math.max(Math.max(a,b),c) 这样的现象仅仅是方法的嵌套不是方法的递归使用

举例:
1、从前有座山,山里有座庙,庙里有个老和尚,老和尚在给小和尚讲故事,故事的内容是:
从前有座山,山里有座庙,庙里有个老和尚,老和尚在给小和尚讲故事,故事的内容是:
从前有座山,山里有座庙,庙里有个老和尚,老和尚在给小和尚讲故事,故事的内容是:

庙倒了,老和尚圆寂了。

2、学习大数据 – 高薪就业 – 挣钱 – 娶媳妇 – 生娃 – 挣学费:
学习大数据 – 高薪就业 – 挣钱 – 娶媳妇 – 生娃 – 挣学费:
学习大数据 – 高薪就业 – 挣钱 – 娶媳妇 – 生娃 – 挣学费:

娶不到媳妇,生不了娃。

2.递归注意事项

1、递归一定要有一个出口(结束条件),否则就成了死递归
2、递归的次数不能太多,否则会造成,栈内存溢出
3、构造方法不能发生递归

3.需求:用代码求出实现5的阶乘

分析:

  5! = 5*4*3*2*1
       = 5*4!
       = 5*4*3!
       = 5*4*3*2!
       = 5*4*3*2*1!

    1、用循环解决
    2、用递归解决
public class DiGui11 {
    public static void main(String[] args) {
        int s=1;
        for (int i=1;i<=5;i++){
            s*=i;

        }
        System.out.println(s);
        System.out.println("5的阶层为:"+diGui(5));
    }



    

    public static int diGui(int i){
        if (i==1){
            return 1;
        }
        else {
            return i*diGui(i-1);
        }
    }
}

过程图:

4. 不死神兔案例。假设有一对兔子,从出生的第三个月开始,每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子。

假设所有的兔子都不会死。问题:二十个月后,兔子的对数是多少?

分析:    找规律:
     月份      兔子的对数
     第一个月      1
     第二个月      1
     第三个月      2
     第四个月      3
     第五个月      5
     第六个月      8
     ...

     由此课件,兔子的对数的数据是:
        1,1,2,3,5,8,13,21,34...

     规律:
        1、从第三项开始,每一项都是前两项之和
        2、说明前两项的数据是已知的

怎么去实现呢?
    1、数组实现
    2、基本变量实现
    3、递归实现

定义两个变量为相邻的数据 第1个相邻的数据: a=1,b=1 第2个相邻的数据: a=1,b=2 第3个相邻的数据:
a=2,b=3 第4个相邻的数据: a=3,b=5

规律:下一次相邻的数据,a的值是上一次b的值,b的值是上一次相邻数据的和a+b

public class DiGui12 {
    public static void main(String[] args) {
        //用数组实现
        int[] arr=new int[20];
        arr[0]=1;
        arr[1]=1;
       for (int i=2;i< arr.length;i++){
           arr[i]=arr[i-1]+arr[i-2];

       }
  System.out.println("第20个月后的兔子对数为"+arr[19]);

  System.out.println("=============================");
    
        
        
        //基本变量实现
        //基本变量实现
        //下一次相邻的数据,a的值是上一次b的值,b的值是上一次相邻数据的和a+b
        int a=1;
        int b=1;
        for (int i=0;i<19;i++){
            int temp=a;
            a=b;
            b=temp+b;
        }
        System.out.println("第20个月后的兔子对数为"+a);
 System.out.println("第20个月后的兔子对数为"+diGui2(20));





    }
  
    
  //定义的递归方法
  
    public static int diGui2(int i){
        if (i==1||i==2){
            return 1;
        }
        else {
            return diGui2(i-1)+diGui2(i-2);
        }
    }
}

结果:

5.遍历指定目录下所有的指定后缀名文件名称 如.java后缀

分析:
1、将目录封装成File对象
2、获取该目录下所有的File对象组成的数组
3、遍历数组得到每一个File对象
4、判断得到的File对象是一个文件还是一个文件夹
1、如果他是一个文件夹,回到第二步
2、如果他是一个文件,判断文件名称是否以.java后缀
如果是,输出
不是,跳过

public class DiGui13 {
    public static void main(String[] args) {
        File file = new File("F:\大数据");
        diGui(file);

    }
    public static void diGui(File file){
        File[] files = file.listFiles();
        for (File f:files){
        if (f.isDirectory()){
            diGui(f);
        }
        else {
            if (f.getName().endsWith(".java")){
                System.out.println(f.getName());
            }
        }//bigdata.java
        }
    }
    }
6.递归删除带内容的目录

分析:
1、获取File对象
2、获取该目录下所有的文件和文件夹组成的File对象数组
3、遍历数组得到每一个File对象
4、判断这个File对象是否是文件夹
是:返回第二步
不是:直接删除

public class DiGUi14 {
    public static void main(String[] args) {
        File file = new File("F:\test");
        delete2(file);
    }
    public static void delete2(File file){
        File[] files = file.listFiles();
        if (files!=null) {
            for (File file1 : files) {
                if (file1.isDirectory()) {
                    delete2(file1);
                } else {

    System.out.println("删除的文件为:" + file1.getName()+"--
    -------"+file1.delete());
                }

            }
 System.out.println("删除的文件夹为:" + file.getName()+"-
 -------"+file.delete());
        }
    }
}

结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/742206.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号