一、File类
1、概念
java.io.File类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。
2、构造方法
public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的 File实例。
public File(File parent, String child) :从父抽象路径名和子路径名字符串创建新的 File实例。
/*
public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的 File实例。
public File(File parent, String child) :从父抽象路径名和子路径名字符串创建新的 File实例。
*/
public class Demo01File {
public static void main(String[] args) {
// 文件路径名
String pathname = "D:\\YOLO\\JavaSE\\a.txt";
File file1 = new File(pathname);
System.out.println(file1);
// 通过父路径和子路径字符串
String parent = "D:\\YOLO\\JavaSE";
String child1 = "b.txt";
File file2 = new File(parent, child1);
System.out.println(file2);
// 通过父级File对象和子路径字符串
File parentDir = new File("D:\\YOLO\\JavaSE");
String child2 = "c.txt";
File file3 = new File(parentDir, child2);
System.out.println(file3);
}
}
3、常用方法
获取功能的方法
/*
public String getAbsolutePath() :返回此File的绝对路径名字符串。
public String getPath() :将此File转换为路径名字符串。
public String getName() :返回由此File表示的文件或目录的名称。
public long length() :返回由此File表示的文件的长度。
*/
public class Demo02File {
public static void main(String[] args) {
File file = new File("D:\\YOLO\\JavaSE\\a.txt");
File fileAbsoluteFile = file.getAbsoluteFile();
System.out.println("绝对路径:" + fileAbsoluteFile); //绝对路径:D:\YOLO\JavaSE\a.txt
String filePath = file.getPath();
System.out.println("文件构造路径:" + filePath); //文件构造路径:D:\YOLO\JavaSE\a.txt
String fileName = file.getName();
System.out.println("文件名称:" + fileName); //文件名称:a.txt
long length = file.length();
System.out.println("文件长度:" + length); //文件长度:10
}
}
判断功能的方法
/*
public boolean exists() :此File表示的文件或目录是否实际存在。
public boolean isDirectory() :此File表示的是否为目录。
public boolean isFile() :此File表示的是否为文件。
*/
public class Demo03File {
public static void main(String[] args) {
File file1 = new File("D:\\YOLO\\JavaSE\\a.txt");
boolean exists1 = file1.exists();
System.out.println(exists1); //true 存在
File file2 = new File("D:\\YOLO\\JavaSE\\b.txt");
boolean exists2 = file2.exists();
System.out.println(exists2); //false 不存在
System.out.println("========");
boolean file1Directory = file1.isDirectory();
System.out.println(file1Directory); //false file1表示的不是目录
boolean file1File = file1.isFile();
System.out.println(file1File); //true file1表示的是文件
File file3 = new File("D:\\YOLO\\JavaSE");
boolean file3Directory = file3.isDirectory();
System.out.println(file3Directory); //true file3表示的是目录
boolean file3File = file3.isFile();
System.out.println(file3File); //false file3表示的不是文件
}
}
创建删除功能的方法
/*
public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
public boolean delete() :删除由此File表示的文件或目录。
public boolean mkdir() :创建由此File表示的目录。
public boolean mkdirs() :创建由此File表示的目录,包括任何必需但不存在的父目录。
*/
public class Demo04File {
public static void main(String[] args) {
//文件的创建
File f = new File("D:\\YOLO\\JavaSE\\b.txt");
try {
System.out.println("是否存在:" + f.exists()); //false
System.out.println("是否创建:" + f.createNewFile()); //true
System.out.println("是否存在:" + f.exists()); //true
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("========");
//目录的创建
File f2 = new File("D:\\YOLO\\JavaSE\\newDir");
System.out.println("是否存在:" + f2.exists()); //false
System.out.println("是否创建:" + f2.mkdir()); //true
System.out.println("是否存在:" + f2.exists()); //true
System.out.println("========");
//创建多级目录
File f3 = new File("D:\\YOLO\\JavaSE\\newDirA\\newDirB");
System.out.println(f3.mkdir()); //false
File f4 = new File("D:\\YOLO\\JavaSE\\newDirA\\\newDirB");
System.out.println(f4.mkdirs()); //false
System.out.println("========");
//文件的删除
System.out.println(f.delete()); //true
System.out.println("========");
//目录的删除
System.out.println(f2.delete()); //true
System.out.println(f4.delete()); //false
}
}
目录的遍历
/*
public String[] list() :返回一个String数组,表示该File目录中的所有子文件或目录。
public File[] listFiles() :返回一个File数组,表示该File目录中的所有的子文件或目录。
*/
public class Demo05File {
public static void main(String[] args) {
File file = new File("D:\\YOLO\\JavaSE");
//获取当前目录下的文件以及文件夹的名称
String[] list = file.list();
if (list != null) {
for (String s : list) {
System.out.println(s);
}
}
System.out.println("========");
//获取当前目录下的文件以及文件夹对象 只要拿到了文件对象那么就可以获取更多信息
File[] listFiles = file.listFiles();
if (listFiles != null) {
for (File listFile : listFiles) {
System.out.println(listFile);
}
}
}
}
二、递归
1、概述
递归:指在当前方法内调用自己的这种现象。
递归的分类:
递归分为两种,直接递归和间接递归。
直接递归称为方法自身调用自己。
间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法。
注意事项:
递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出;
在递归中虽然有限定条件,但是递归次数不能太多。否则也会发生栈内存溢出;
构造方法,禁止递归。
2、递归累加求和
public static void main(String[] args) {
int a = 4;
int num = getSum(a);
System.out.println("1到" + a + "的整数和为:" + num);
}
private static int getSum(int i) {
if (i == 1) {
return 1;
} else {
return i + getSum(i - 1);
//递归一定要有条件限定保证递归能够停止下来 次数不要太多 否则会发生栈内存溢出
}
}
}
3、递归求阶乘
public static void main(String[] args) {
int a = 4;
int value = getValue(a);
System.out.println("1到" + a + "的阶乘为:" + value);
}
private static int getValue(int i) {
if (i == 1) {
return 1;
} else {
return i * getValue(i - 1);
}
}
}