记录file和基础io流的学习

本文详细介绍了Java中的File类使用,包括创建、删除文件及遍历文件夹的方法,并展示了递归的概念和应用,如文件搜索和啤酒问题。同时,讨论了字符集的组成和编码解码过程,以及IO流的字节流和字符流的使用,强调了资源释放的重要性。
摘要由CSDN通过智能技术生成

1.File类的使用

1.1File类概述

1.File类在java.io.File包下
2.File类提供了这些功能:删除、获取文件信息,不能读写文件内容

1.2创建File对象

1.public File(String pathname)根据文件路径创建文件对象
2.public File(String parent, String child)从父路径名和子路径名字符串创建文件对象
3.public File(File parent, String child)根据父路径对应文件对象和子路径名字符串创建文件对象

1.2File类的常用API

1.判断文件类型、获取文件信息

//        创建file文件
        File file = new File("src/hello.txt");
//        判断是否是文件  true
        System.out.println(file.isFile());
//        判断是否是文件夹 false
        System.out.println(file.isDirectory());
//        获取文件名称 hello.txt
        System.out.println(file.getName());
//        获取绝对路径 D:\Practical_training\code\test2\test2\src\hello.txt
        System.out.println(file.getAbsoluteFile());
//        获取文件字节数 14
        System.out.println(file.length());
//        获取文件的最后修改时间 2022-07-21 16:56:34
        System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(file.lastModified()));

2.创建文件、删除文件

//        如果存在文件则创建失败,如果不存在则创建
        try {
            new File("src/hh.txt").createNewFile();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
//        创建一级目录
        File file1 = new File("src/aaa");
        file1.mkdir();
//        创建多级目录
        File file2 = new File("src/aaa/bbb");
        file2.mkdirs();
//        删除文件或空文件夹
        file1.delete();
        file2.delete();

3.遍历文件夹

        File src = new File("src");
//        获取一级目录信息
        String[] list = src.list();
        for (String s : list) {
            System.out.println(s);
        }

//        获取所有一级文件对象
        File[]  files = src.listFiles();
        for (File file3 : files) {
            System.out.println(file3.getAbsoluteFile());
        }
    }

在这里插入图片描述

2.方法递归

2.1递归的形式和特点

形式

1.直接递归
2.间接递归

特点

自己调用自己

2.2递归的算法流程和核心要素

1.入门案例1-n阶乘

public static int f(int n){
        if (n == 1){
            return 1;
        }
        return n*f(n-1);
    }

2.核心要素

1.递归公式
2.递归终结点
3.递归的方法必须走向终结点

2.3递归的经典问题

猴子吃桃问题
在这里插入图片描述

public static int eat(int n){
        if (n == 10){
            return 1;
        }
        return 2*eat(n+1)+2;
    }

2.4非规律化递归案例-文件搜索

在这里插入图片描述

public static void searchFile(File file,String fileName){
//        判断是否是文件夹
        if (file != null && file.isDirectory()){
//            提取当前目录下的一级文件对象
            File[] files = file.listFiles();
//            判断是否存在一级文件对象
            if (files != null && files.length > 0 ){
                for (File file1 : files) {
//                    如果是自己要找的文件则输出
                    if (file1.isFile()) {
                        if (file1.getName().contains(fileName)){
                            System.out.println(file1.getAbsolutePath());
                        }
                    }else {
//                        如果不是则继续找
                        searchFile(file,fileName);
                    }
                }
            }
        }else {
            System.out.println("不是文件夹");
        }
    }

2.5非规律化递归案例-啤酒问题

在这里插入图片描述

public class Recusion_beer {

    public static int totalNum;
    public static int bottleNUm;
    public static int capNUm;

    public static void main(String[] args) {

        count(10);
        System.out.println("啤酒:"+totalNum+", 空瓶:"+bottleNUm+", 盖子:"+capNUm);
    }

    public static void count(int n){
//        一共可以购买的啤酒
        int beer = n/2;
        totalNum += beer;
//        获得的盖子和空瓶的总量
        int cap = beer+capNUm; //盖子
        int bottle = beer+bottleNUm;
//        用盖子和空瓶换酒(此处换算成等量酒的钱)
        int money = 0;
        if (cap >= 4){
            money += (cap/4) * 2;
        }
//        剩下的盖子
        capNUm = cap%4;
        if (bottle >= 2){
            money += (bottle/2) * 2;
        }
//            剩下的空瓶
        bottleNUm = bottle%2;  //注意,这里不是+=,因为剩的空瓶已经加上新的空瓶拿来换酒了
        if (money>=2){
            count(money);
        }
    }
}

3.字符集

在这里插入图片描述
在这里插入图片描述

3.1字符串常见的字符底层组成是什么样的

1.英文和数字在任何字符集中都只占一个字节
2.GBK字符中一个中文字符占两个字节
3.utf-8中一个中文一般占三个字节

3.2编码前的字符集和编码好的字符集有什么要求

1.字符集必须一致,不然会乱码
2.英文和数字在任何编码中都不会乱码

3.3字符集的编码和解码

//通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。
String(byte[] bytes);
//通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String。
String(byte[] bytes, Charset charset);
//通过使用平台的默认字符集编码字符串,将结果存入一个新的byte数组里面去
byte[]	getBytes();
通过指定字符集编码字符串,将结果存入一个新的byte数组里面去
byte[]	getBytes(Charset charset);

4.IO流的作用分类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.字节流和字符流

5.1字节流的使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.2资源释放的方式

1.try-catch-finally
在这里插入图片描述

2.try-with-source
在这里插入图片描述
在这里插入图片描述

5.3字符流的使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值