java学习基础课之File(渡一教育)(十五)

  • I/O相关—> 输入/输出 流(数据流动)
  • 数据流动的方向:读数据(输入Input) ;写数据(输出output)
  • 文件流;;字符流;对象流;网络流…
  1. 什么叫文件
  • 一种电脑的存储形式;
  • 文件有不同的格式 : .txt .doc .ppt .mp4 .jpg .rar …
  • 文件夹?----目录,路径 , 不算文件
  • File----->与电脑上的文件或文件夹产生一一对应的映射关系
  1. 什么叫文件流?做什么?
读取文件中的内容               向文件中写内容
  文件输入流                     文件输出流
  字节型文件输入流            字节型文件输出流
  字符型文件输入流            字符型文件输出流

一.File类

  1. java.io包中
  2. 文件或目录路径名的抽象表示形式
  3. File与真实硬盘中的文件或文件夹,不是一个东西
    File是在内存中的一个对象<—映射—>硬盘上的文件或文件夹
  4. File类中的常用的方法:
  • (1)File file = new File("D://test//test.txt"); 通过路径构造对象,test是真实存在的。
    如果文件不是真实存在的:File file = new File("D://test//b.txt");

file对象 是真正的文件么? 不是
file对象 堆内存中 创建出来的一个对象空间
路径是看创建的对象 是否能与硬盘中的一个真实文件产生对应映射关系
所以虽然文件不存在,但是并不影响我们创建对象,只不过映射关系不存在而已,因为硬盘上没有那个文件。

  • (2) canRead()canWrite()isHidden()isFile()isDirectory()
System.out.println(file.canExecute()); //是否可执行
System.out.println(file.canRead()); //文件是否可以打开,可读
System.out.println(file.canWrite()); //是可写
System.out.println(file.isHidden()); //文件是否隐藏
System.out.println(file.isFile());//判断当前的file是否是一个文件
System.out.println(file.isDirectory());//判断当前的file是否是一个目录(文件)
  • (3) length()获取文件中字节的个数:
    long l = file.length();
  • (4)lastModified()获取文件最后的修改时间—>毫秒值
long time = file.lastModified();//获取文件最后修改时间
Date date = new Date(time);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd KK:mm:ss");
System.out.println(sdf.format(date));
  • (5)String path = getAbsolutePath()获取文件的绝对路径 :D://test//Test.txt
    String name = getName() 获取文件的名字:Test.txt
        File file = new File("E:\\test\\Test.txt");
        String name = file.getName();
        //文件的名字  Test.txt
        String path = file.getAbsolutePath();
        //文件的绝对路径  D://test//Test.txt
        System.out.println(name);
        System.out.println(path);

绝对路径<---->相对路径
绝对路径可以通过完整的字符串 定位盘符 文件夹 文件
相对路径没有盘符的写法 当前工程(项目)所在的位置找寻

  • (6)boolean = createNewFile() 创建新的文件
 //创建一个file对象
        File file = new File("D://test//abc.txt");
        //通过这个对象  回头在硬盘上 创建文件
        //必须处理异常 才能file.createNewFile(),因为你要创建文件,盘符写错,就失败了,所以一定处理异常
        try {
            boolean value = file.createNewFile();//编译时异常
            System.out.println(value);
        } catch (IOException e) {
            e.printStackTrace();
        }

boolean = mkdir :创建新的文件夹 , 外层没有,不能创建
boolean = mkdirs :创建新的文件夹 外层没有 可以自动创建

//创建一个新的file对象
        File file = new File("D://test//bbb/inner");
        //在硬盘上 创建一个新的文件夹
        //boolean value = file.mkdir();//外层(父元素)需要真实存在
        boolean value = file.mkdirs();//可以创建文件夹, 如果外层没有  也会同时创建
        System.out.println(value);
  • (7)String pname = getParent() :获取当前file的父亲file名字
    File file = getParentFile() : 获取当前file的父亲file对象
    String[] names = list() :获取当前file的所有儿子名字
    File[] files = listFiles() :获取当前file的所有儿子对象
        File file = new File("D://test//aaa");
        //数组对象为空         证明当前的file是一个文件
        //数组对象不为空       证明当前的file是一个文件夹
        //数组对象的长度不为0  证明当前的file是一个不为空的文件夹  文件夹内有元素
        File[] files = file.listFiles();
        System.out.println(files.length);
  • (8)boolean = delete() 删除文件(任何一个文件)或空的文件夹 ,不能删除带元素的文件夹。

常用方法:
canRead; canWrite ; isHidden ;length ; lastModifered ; isFile ;isDirectory;
getAbsolutePath() ; getName()
绝对路径—相对路径(工程的根目录去找)
createNewFile() ; mkdir(); mkdirs();
File = getParentFile() ; getParent()
File[] = listFiles() ; list();
delete();

二. 文件夹遍历删除(递归)

  1. 文件夹的遍历----需要一个递归
    看看文件夹中有什么。
    普通函数的调用:
    public void testOne(){
        this.testTwo();
        System.out.println("我是testOne方法");
    }
    public void testTwo(){
        this.testThree();
        System.out.println("我是testTwo方法");
    }
    public void testThree(){
        System.out.println("我是testThree方法");
    }
    public static void main(String[] args){
        //加载TestMethod类的过程
        TestMethod tm = new TestMethod();   
        tm.testOne();//调用testOne让其执行一遍--->栈内存中 临时
    }
    /*
我是testThree方法
我是testTwo方法
我是testOne方法
  */

执行思想:主方法中执行这句代码tm.testOne();,testOne方法中的第一句是调用了testTwo方法,所以先执行testTwo方法,testTwo方法的第一句又是执行testThree方法,所以先执行testThree方法,输出我是testThree方法,相当于testThree方法执行完毕,等于testTwo中的第一句this.testTwo();执行完毕,执行第二句:System.out.println("我是testTwo方法");,输出我是testTwo方法,至此testTwo方法执行完毕,等于testOne中的this.testTwo();这句代码执行完毕,执行下一句System.out.println("我是testOne方法");输出我是testOne方法

内存当中的执行过程:在这里插入图片描述

首先默认方法区中加载类模板;类模板有三个方法。
new TestMethod();堆内存中加载类模板。
TestMethod tm栈内存中申请空间tm,指向堆内存的类模板。
tm.testOne();调用testOne让其执行一遍—>栈内存中,临时开辟一块红色空间。
第一件事调用testTwo方法,所以临时给testTwo开辟蓝色空间,但是由于testOne还没有执行完毕,所以空间没有释放。
然后testTwo方法调用testThree方法,蓝色调用紫色,所以又开辟了紫色空间。

循环和递归:
在这里插入图片描述
循环

 //      设计一个方法  描述盖宝塔
    public void buildTower(int floor){//5
        for(int i=1;i<=floor;i++){
            System.out.println("盖到第"+floor+"层宝塔啦");
        }
    }

递归

    //递归的想法
    //  想让我做事(盖第五层) 我要求让别人把之前的事情做完
    //      1.让别人先做事
    //      2.我自己做事
    public void buildTower(int floor){//5
        //判断当前floor是否为1 若不是找一个别人先盖之前层
        if(floor>1){
            this.buildTower(floor-1);
        }
        //我自己做事
        System.out.println("盖到第"+floor+"层宝塔啦");
    }

递归盖宝塔的过程:
在这里插入图片描述

方法区先加载类模板。new一个对象,在堆内存中。栈内存中tm指向堆内存的类模板,调用方法让方法执行,在栈内存中开辟临时空间。先判断5>1 调用,然后自己的执行的先等一下。调用就在开辟一个小空间,4>1 ,调用,自己的执行,也在等一下,以此类推,1>1不满足,执行自己的方法,输出1层,相当于2的调用执行完毕,可以执行2自己的输出2层,表示3的调用执行完毕,可以执行3 的自己的输出了,输出3层,等于4的调用执行完毕,可以执行4自己的输出,表示的5调用执行完毕,可以执行5的调用自己的输出,输出5层。

遍历文件的代码:

     //设计一个方法  用来展示(遍历)文件夹
    //  参数-->file(代表文件或文件夹)
    public void showFile(File file){//D://test文件夹
        //判断如果file是一个文件夹 文件夹内有元素 找一个人先做
        //获取file的子元素  files==null是个文件 files!=null是个文件夹 files.length!=0是一个带元素的文件夹
        File[] files = file.listFiles();//test文件夹所有子元素
        if(files!=null && files.length!=0){
            for(File f:files){//每一个子元素都找人遍历
                this.showFile(f);//循环第一次 test文件夹中的aaa 循环第二次 test->bbb 循环第三次 Test.txt
            }
        }
        //做自己的显示(file是文件或file是一个空的文件夹)
        System.out.println(file.getAbsolutePath());
    }

    public static void main(String[] args){
        NewTestFile ntf = new NewTestFile();
        File file = new File("D://test");
        ntf.showFile(file);
    }

运行过程:
在这里插入图片描述

红色是执行过程。

  1. 文件夹的删除----需要一个递归
    //设计一个方法 删除文件夹
    //  参数 file
    public void deleteFile(File file){
        //判断file不是空文件夹 找人先做事
        File[] files = file.listFiles();
        if(files!=null && files.length!=0){
            for(File f:files){
                this.deleteFile(f);
            }
        }
        //删除file (file是个文件或file是一个空文件夹)
        file.delete();
    }
    public static void main(String[] args){
        NewTestFile ntf = new NewTestFile();
        File file = new File("D://test");
        ntf.deleteFile(file);
    }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值