JAVA高级进阶08补充-递归、IO-文件&字节流

第七天、补充-递归

什么是方法递归?

  • 递归是一种算法,在程序设计语言中广泛应用

  • 从形式上说:方法调用自身的形式称为方法递归( recursion)

递归的形式

  • 直接递归:方法自己调用自己

  • 间接递归:方法调用其他方法,其他方法又回调方法自己

使用方法递归时需要注意的问题:

  • 递归如果没有控制好终止,会出现递归死循环,导致栈内存溢出错误

计算公式

  • f(n)=f(n-1) * n f是方法名 n是参数

  • f(n) = f(n-1)+n f是方法名 n是参数

第八天、IO-文件&字节流

File

创建对象

File

  • File对象既可以代表文件、也可以代表文件夹。它封装的对象仅仅是一个路径名,这个路径可以存在,也可以不存在

创建File类的对象

路径写法

  • 绝对路径:从盘符开始

    File file = new File(“D:\\itheima\\a.txt”);
  • 相对路径:不带盘符,默认直接到当前工程下的目录寻找文件。

    File file = new File(“模块名\\a.txt”);

常用方法1:判断文件类型、获取文件信息

File提供的判断文件类型、获取文件信息功能

常用方法2:创建文件、删除文件

File类创建文件的功能

File类删除文件的功能

  • 注意:delete方法默认只能删除文件和空文件夹,删除后的文件不会进入回收站

常用方法3:遍历文件夹

File类提供的遍历文件夹的功能

使用listFiles方法时的注意事项

  • 当主调是文件,或者路径不存在时,返回null

  • 当主调是空文件夹时,返回一个长度为0的数组

  • 当主调是一个非空文件夹,但是没有权限访问该文件夹时,返回null

 文件搜索小案例

public static void main(String[] args) {
    // 指定搜索的根目录
    File file = new File("你的磁盘名称例:(D:/...)");
    // 指定要搜索的文件名
    String name = "QQ.exe";
    // 调用搜索方法
    search(file, name);
}
public static void search(File file,String name){
    // 获取目录下的所有文件和子目录
    File [] files = file.listFiles();
    // 如果目录为空或没有文件和子目录,则返回
    if(files == null || files.length == 0){
       return;
} 
    // 遍历所有文件和子目录
    for(File file1 : files){
    // 如果是文件,则检查文件名是否匹配
        if(file1.isFile()){
           if(file1.getName().equals(name)){
               // 如果文件名匹配,则输出文件的绝对路径
               System.out.println(file1.getAbsolutePath());
            } 
        } else {
            // 如果是目录,则递归搜索该目录
            search(file1, name);  
        }
    }
}

字符集

常见字符集介绍

标准ASCII字符集

  • ASCII(American Standard Code for Information Interchange): 美国信息交换标准代码,包括了英文、符号等。

  • 标准ASCII使用1个字节存储一个字符,首尾是0,总共可表示128个字符,对美国佬来说完全够用。

GBK(汉字内码扩展规范,国标)

  • 汉字编码字符集,包含了2万多个汉字等字符,GBK中一个中文字符编码成两个字节的形式存储。

  • 注意:GBK兼容了ASCII字符集。

Unicode字符集(统一码,也叫万国码)

  • Unicode是国际组织制定的,可以容纳世界上所有文字、符号的字符集。

UTF-8

  • 是Unicode字符集的一种编码方案,采取可变长编码方案,共分四个长度区:1个字节,2个字节,3个字节,4个字节

  • 英文字符、数字等只占1个字节(兼容标准ASCII编码),汉字字符占用3个字节。

字符集的编码、解码操作

Java代码完成对字符的编码

Java代码完成对字符的解码

  • 注意:字符编码时使用的字符集,和解码时使用的字符集必须一致,否则会出现乱码

IO流

IO流概述

  • I指Input,称为输入流:负责把数据读到程序中来

  • O指Output,称为输出流:负责把数据写到存储中去

IO流的分类

IO流总体来看就有四大流

  • 字节输入流:以内存为基准,来自磁盘文件/网络中的数据以字节的形式读入到内存中去的流

  • 字节输出流:以内存为基准,把内存中的数据以字节写出到磁盘文件或者网络中去的流

  • 字符输入流:以内存为基准,来自磁盘文件/网络中的数据以字符的形式读入到内存中去的流

  • 字符输出流:以内存为基准,把内存中的数据以字符写出到磁盘文件或者网络介质中去的流

IO流-字节流

IO流体系

文件字节输入流:每次读取一个字节

FileInputStream(文件字节输入流)

  • 作用:以内存为基准,可以把磁盘文件中的数据以字节的形式读入到内存中来。

  • 注意: 使用FileInputStream每次读取一个字节,读取性能差,并且读取汉字输出会乱码

文件字节输入流:每次读取多个字节

FileInputStream(文件字节输入流)

  • 作用:以内存为基准,把文件中的数据以字节的形式读入到内存中来。

  • 注意: 使用FileInputStream每次读取多个字节,读取性能得到了提升,但读取汉字输出还是会乱码。

文件字节输入流:一次读取完全部字节

文件字节输入流:一次读取完全部字节

  • 方式一:自己定义一个字节数组与被读取的文件大小一样大,然后使用该字节数组,一次读完文件的全部字节。

  • 方式二:Java官方为InputStream提供了如下方法,可以直接把文件的全部字节读取到一个字节数组中返回。

直接把文件数据全部读取到一个字节数组可以避免乱码,是否存在问题?

  • 如果文件过大,创建的字节数组也会过大,可能引起内存溢出。

文件字节输出流:写字节出去

FileOutputStream(文件字节输出流)

  • 作用:以内存为基准,把内存中的数据以字节的形式写出到文件中去。

  • 25
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值