黑马教程强化day3-1

发布于:2025-06-16 ⋅ 阅读:(17) ⋅ 点赞:(0)

一、File

1.定义:

是java.io.包小的类,File类的对象,用于代表当前操作系统的文件(可以是文件、或文件夹)。

2.创建File类的对象

  • public File(String pathname):根据文件路径创建文件对象。
  • public File(String parent,String child):根据父路径和子路径名字创建文件对象。
  • public File(File parent,String child):根据父路径对应文件对象和子路径名字创建文件对象。

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

  • public boolean exists():判断当前文件对象,对饮的文件路径是否存在,存在返回True。
  • public boolean isFile():判断当前文件对象指代的是否是文件,是返回True。
  • public boolean isDirectory():判断当前文件对象指代的是否是文件夹,是返回True。
  • public String getName():获取文件的名称(包含后缀)
  • public long lastModified():获取文件的大小,返回字节个数
  • public String getPath():获取创建文件对象,使用的路径。
  • public String getAbsolutePath():获取绝对路径。

4.File提供的创建的方法

  • public boolean createNewFile():创建问价
  • public boolean mkdir():创建一级文件夹
  • public boolean mkdirs():创建多级文件夹

5.File类删除文件的功能

  • public boolean delete():删除文件、文件夹,只能删除空文件夹。

6.File提供的遍历文件夹的方法

  • public String[] list():获取当前目录下所有的“一级文件名称”到一个字符串数组中去。
  • public File[] listFiles():获取当前目录下所有的“一级文件对象”到一个文件对象数组中去(重点)

使用listFiles方法时的注意事项:

  • 当主调是文件,或者路径不存在时,返回null
  • 当主调是空文件夹时,返回一个长度为0的数组。
  • 当主调是一个有内容的文件夹时,将里面所有一级文件和文件夹的路径放在File数组中返回。
  • 当主调是一个文件夹,且里面有隐藏文件时,将里面所有文件和文件夹的路径放在File数组中返回,包括隐藏文件。
  • 当主调是一个文件夹,但是没有权限访问该文件夹时,返回null。

代码演示

package com.item.demo1Flie;
import java.io.File;
import java.io.IOException;
public class Fliedemo1 {
    public static void main(String[] args) throws IOException {
        //1.创建File类的对象
        File f1 = new File("D:\\a.docx");
        File f2=new File("D:/a.docx");
        System.out.println(f1.length());//0
        System.out.println(f2.length());//0
        System.out.println(f1.exists());//true
        System.out.println(f1.isFile());//true
        System.out.println(f1.isDirectory());//false
        System.out.println(f1.getName());//a.docx
        //2.只要带盘符的都称之为绝对路径。
        //3.相对路径:不带盘符的都是相对路径,一般都是找到项目根目录下的文件。
        System.out.println(f1.getPath());//D:/a.docx
        System.out.println(f1.getAbsolutePath());//D:/a.docx
        File f3=new File("day3\\src\\dilei0.txt");
        System.out.println(f3.length());//10
        //4.创建对象代表不存在的文件路径
        File f4=new File("D:/aa.docx");
        System.out.println(f4.exists());//false
        System.out.println(f4.createNewFile());//把这个文件创建出来,true
        //5.创建对象代表不存在的文件夹,mkdir(),mkdirs()
        File f5=new File("D:/bb");
        System.out.println(f5.exists());//false
        System.out.println(f5.mkdir());//只能创建一级文件夹,true
        File f6=new File("D:/cc/aa");
        System.out.println(f5.mkdirs());//可以创建多级文件夹,true
        //6.创建File对象代表存在的文件,然后删除,
        File f7=new File("D:/a.docx");
        System.out.println(f7.delete());//删除文件,true,只能删除空文件夹。
        //7.可以获取某个目录下的全部一级名称
        File f8=new File("D:/");
        String[] names=f8.list();
        for (String name : names) {
            System.out.println(name);
        }
        //8.可以获取某个目录下的全部一级文件对象
        File[] files=f8.listFiles();
        for (File file : files) {
            System.out.println(file.getAbsoluteFile());
        }
    }
}

二、递归(了解递归算法,以便实现多级遍历找文件)

1.定义

递归是一种算法,在程序语言中广泛应用
从形式上说:方法调用自身的形式称为方法递归。

2.递归的形式

直接递归:方法自己调用自己
间接递归:方法调用其他方法,其他方法有回调方法自己。

3.递归三要素

  • 递归的公式:
  • 递归的终点:
  • 递归的方向要走向终结点。

代码演示

例题:计算n的阶乘
需求:计算n的阶乘,5的阶乘=12345等
分析:1.f(n)=12…*(n-1)*n
2.那么公式等价于f(n)=f(n-1)*n
3.则求1-5的阶乘:
f(5)=f(4)*5
f(4)=f(3)*4
f(3)=f(2)*3
f(2)=f(1)*2
f(1)=1

package com.item.demo1Flie;
public class Filedemo2 {
    public static void main(String[] args) {
        printA();
    }
    public static void printA(){
        System.out.println("A");
        printA();//直接调用,没有停止条件,无限。栈溢出
    }
}
public class Filedomo3 {
    public static void main(String[] args) {
        //目的:计算阶乘
        System.out.println(f(5));
    }
    public static int f(int n){
        if(n==1){
            return 1;
        }
        return f(n-1)*n;//一遍一遍的去往下调用,到最后一步,然后从最后一步开始返回,最终返回1
    }
}

4.文件搜索(重要)

package com.item.demo1Flie;

import java.io.File;

/** 文件搜索:**/
public class Filedemo4 {
    public static void main(String[] args) {
        //目标:完成文件搜索,找到D:盘下的QQ.txt文件的位置。
        File dir=new File("D:/");
        searchFile(dir,"QQ.txt");
    }
    public static void searchFile(File dir,String findName){
        //1.判断极端情况
        if(!dir.exists()|| dir==null||dir.isFile()){
            return;//不搜索
        }
        //2.获取当前目录下的所有一级文件或者文件夹
        File[] files=dir.listFiles();
        //3.判断当前是否存在一级文件对象,存在才可以遍历
        if(files!=null && files.length>0){
            //4.遍历一级文件对象
            for(File file:files){
                //5.判断当前一级文件对象是否是文件
                if(file.isFile()){
                    //6.判断文件名是否相同
                    if(file.getName().contains(findName)){
                        System.out.println("找到文件:"+file.getAbsoluteFile());
                    }
                }else{
                    //7.判断当前文件是否是文件夹
                    //8.如果是文件夹,则继续递归调用
                    searchFile(file,findName);
                }
            }
        }
    }
}

package com.item.demo1Flie;

import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Arrays;

三、字符集

1. 标准ASCII字符串

定义:美国信息交换标准代码,包括了英文、符号等。
标准ASCII使用1个字节存储一个字符,首位是0,因此,总共可表示128个字符。

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

定义:汉字编码字符集,包含2万多个汉字等字符,GBK中一个中文字符编码成两个字节的形式存储。
注意:GBK兼容了ACII字符集。
GBK规定:汉字的第一个字节的第一位必须是1,汉字占2个字符,英文、数字占1个字节。

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

定义:是国际组织制定的,可以容纳世界上所有文字、符号的字符集。
UTF-32:我4个字节表示一个字符。
UTF-8(必须掌握):是Unicode字符集的一种编码方案,采取可变长编码方案,共分四个长度区:1个字节,2个字节,3个字节,四个字节。
注意:英文字符、数字等只占1个字节(兼容标准ASCII编码),汉字字符占用3个字节。
UTF-8编码方式(二进制)

  • 1字节:0xxxxxxx
  • 2字节:110xxxxx 10xxxxxx
  • 3字节:1110xxxx 10xxxxxx 10xxxxxx
  • 4字节:11110xxx 10xxxxxx 10xxxxxx

注意1:字符编码时,使用的字符集,和解码时使用的字符集必须一致,否则会出现乱码
注意2:英文,数字一般不会乱码,因为很多字符集都兼容了ASCII编码。

4.对字符的编码

  • byte[] getBytes():指定平台的默认字符集将该String编码为一系列字节,将结果存储到一个新的字节数组中。
  • byte[] getBytes(String charsetName):使用指定的字符集将该String编码为一系列字节,将结果存储到新的字节数组中。

5.对字符的解码

  • String(byte[] bytes):通过使用平台的默认字符集解码指定的字节数组来构造新的String。
  • String(byte[] bytes,String charsetName):通过指定的字符集解码指定的字节数组来构造新的String。

代码演示

public class Filedemo5 {
    public static void main(String[] args) throws UnsupportedEncodingException {
        //编码
        String name="我爱国";
        byte[] bytes=name.getBytes();//默认平台的UTF-8编码
        byte[] bytes1=name.getBytes("GBK"); //指定GBK编码,需要抛出异常
        System.out.println(bytes.length);//9
        System.out.println(Arrays.toString(bytes));//[-26, -120, -111, -25, -120, -79, -27, -101, -67]
        System.out.println(bytes1.length);//6
        System.out.println(Arrays.toString(bytes1));//[-50, -46, -80, -82, -71, -6]
        //解码
        String name1=new String(bytes);
        String name2=new String(bytes1,"GBK");
        System.out.println(name1);//我爱国
        System.out.println(name2);//我爱国
    }
}


网站公告

今日签到

点亮在社区的每一天
去签到