是java.io.包小的类,File类的对象,用于代表当前操作系统的文件(可以是文件、或文件夹)。
使用listFiles方法时的注意事项:
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());
}
}
}
递归是一种算法,在程序语言中广泛应用
从形式上说:方法调用自身的形式称为方法递归。
直接递归:方法自己调用自己
间接递归:方法调用其他方法,其他方法有回调方法自己。
例题:计算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
}
}
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;
定义:美国信息交换标准代码,包括了英文、符号等。
标准ASCII使用1个字节存储一个字符,首位是0,因此,总共可表示128个字符。
定义:汉字编码字符集,包含2万多个汉字等字符,GBK中一个中文字符编码成两个字节的形式存储。
注意:GBK兼容了ACII字符集。
GBK规定:汉字的第一个字节的第一位必须是1,汉字占2个字符,英文、数字占1个字节。
定义:是国际组织制定的,可以容纳世界上所有文字、符号的字符集。
UTF-32:我4个字节表示一个字符。
UTF-8(必须掌握):是Unicode字符集的一种编码方案,采取可变长编码方案,共分四个长度区:1个字节,2个字节,3个字节,四个字节。
注意:英文字符、数字等只占1个字节(兼容标准ASCII编码),汉字字符占用3个字节。
UTF-8编码方式(二进制)
注意1:字符编码时,使用的字符集,和解码时使用的字符集必须一致,否则会出现乱码
注意2:英文,数字一般不会乱码,因为很多字符集都兼容了ASCII编码。
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);//我爱国
}
}