目录
- 一、File
- 1.定义:
- 2.创建File类的对象
- 3.File提供的判断文件类型、获取文件信息功能
- 4.File提供的创建的方法
- 5.File类删除文件的功能
- 6.File提供的遍历文件夹的方法
- 代码演示
- 二、递归(了解递归算法,以便实现多级遍历找文件)
- 1.定义
- 2.递归的形式
- 3.递归三要素
- 代码演示
- 4.文件搜索(重要)
- 三、字符集
- 1. 标准ASCII字符串
- 2.GBK(汉字内码扩展规范,国标)
- 3.Unicode字符集(统一码,也叫万国码)
- 4.对字符的编码
- 5.对字符的解码
- 代码演示
一、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());//0System.out.println(f2.length());//0System.out.println(f1.exists());//trueSystem.out.println(f1.isFile());//trueSystem.out.println(f1.isDirectory());//falseSystem.out.println(f1.getName());//a.docx//2.只要带盘符的都称之为绝对路径。//3.相对路径:不带盘符的都是相对路径,一般都是找到项目根目录下的文件。System.out.println(f1.getPath());//D:/a.docxSystem.out.println(f1.getAbsolutePath());//D:/a.docxFile 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());//falseSystem.out.println(f4.createNewFile());//把这个文件创建出来,true//5.创建对象代表不存在的文件夹,mkdir(),mkdirs()File f5=new File("D:/bb");System.out.println(f5.exists());//falseSystem.out.println(f5.mkdir());//只能创建一级文件夹,trueFile 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);//9System.out.println(Arrays.toString(bytes));//[-26, -120, -111, -25, -120, -79, -27, -101, -67]System.out.println(bytes1.length);//6System.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);//我爱国}
}