File类的概述和构造方法
概述:
java.io.File 类是⽂件和⽬录路径名的抽象表示,主要⽤ 于⽂件和⽬录的创建、查找和删除等操作。
构造方法:
-
public File(String pathname) :通过将给定的 路径 名字符串 转换为抽象路径名来创建新的 File 实例
-
public File(String parent, String child) :从 ⽗ 路径名字符串和⼦路径名字符串 创建新的 File 实例。
-
public File(File parent, String child) :从 ⽗抽 象路径名和⼦路径名字符串 创建新的 File 实例。
//File类的概述:主要用于 文件和目录的创建,查找和删除等操作
public class Test01 {
public static void main(String[] args) {
//通过将给定的路径名字符串转换为抽象路径名来创建新的File
File file1 = new File("E:\\图片\\新建文件夹\\1.jpg");
System.out.println(file1);
//从父路径名字字符串和子路径名字符串创建新的File实例
File file2 = new File("E:\\图片","新建文件夹\\1.jpg");
System.out.println(file2);
//从父抽象路径名和子路径名字符串创建的File实例
File file3 = new File("\\图片\\新建文件夹");
File file4 = new File(file3,"1.jpg");
System.out.println(file4);
System.out.println("File对象代表硬盘中实际存在的一个文件或者目录");
System.out.println("无论该路径下是否存在文件或者目录,都不影响File对象的创建");
}
}
File类常用方法
-
public String getAbsolutePath() :返回此 File 的绝对路径名字符串。
-
public String getName() :返回由此 File 表示的⽂件或⽬录的名称。
-
public long length() :返回由此 File 表示的⽂件的⻓度。 不能获取⽬录的⻓度。
-
public String getPath() :将此 File 转换为路径名字符串。
代码:
public class Test02 {
public static void main(String[] args) {
// getAbsolutePath() 返回绝对路径
// getPath() 将File转换为路径名字符串
// getName() 获取文件名或文件夹名
// length() 获取文件大小,不能获取文件夹的大小
//绝对路径
File file1 = new File("C:\\Users\\25120\\IdeaProjects\\java\\src\\zifuliu\\1.png");
System.out.println("File1表示的文件的绝对路径"+file1.getAbsolutePath());
System.out.println("File1表示的文件的文件名:"+file1.getName());
System.out.println("File1表示的文件的构造路径"+file1.getPath());
System.out.println("File1表示的文件的字节大小"+file1.length());
System.out.println("=======================================");
//相对路径
File file2 = new File("2.png");
System.out.println("File2表示的文件的绝对路径"+file2.getAbsolutePath());
System.out.println("Fele2表示的文件的构造路径"+file2.getPath());
System.out.println("File2表示的文件的文件名:"+file2.getName());
System.out.println("File2表示的文件的字节大小"+file2.length());
System.out.println("=======================================");
File file3 = new File("25120\\IdeaProjects\\java\\src\\zifuliu");
System.out.println("File3表示的文件的绝对路径"+file3.getAbsolutePath());
System.out.println("Fele3表示的文件的构造路径"+file3.getPath());
System.out.println("File3表示的文件的文件名:"+file3.getName());
System.out.println("File3表示的文件的字节大小"+file3.length());
}
}
判断功能的方法
-
public boolean exists() :此 File 表示的⽂件或⽬录是否实际存在。
-
public boolean isDirectory() :此 File 表示的是否为⽬录。
-
public boolean isFile() :此 File 表示的是否为⽂件。
public class Test03 {
public static void main(String[] args) {
// exists() 判断文件及文件夹是否存在
// isDirectory() 判断是否为文件夹
// isFile() 判断是否为文件
//如果使用相对路劲的话就会找不到文件或者文件夹,所以必须使用绝对路径
File file1 =new File("C:\\Users\\25120\\IdeaProjects\\java\\src\\zifuliu\\1.png");
System.out.println(file1.exists());//如果存在就返回true
System.out.println(file1.isFile());
File file2 =new File("C:\\Users\\25120\\IdeaProjects\\java\\src\\zifuliu");
System.out.println(file2.isDirectory());//如果存在就返回true
System.out.println("---------------------------------------------");
}
}
创建删除功能的方法
-
public boolean createNewFile() :当且仅当具有该 名称的⽂件尚不存在时,创建⼀个新的空⽂件。
-
public boolean delete() :删除由此 File 表示的⽂件或⽬录。
-
public boolean mkdir() :创建由此 File 表示的⽬录。
-
public boolean mkdirs() :创建由此 File 表示的⽬录,包括任何必需但不存在的⽗⽬录。
public class Test03 {
public static void main(String[] args) {
//创建删除功能方法
// createNewFile() 创建文件
// mkdir() 创建文件夹,当前文件夹 d:\dir\dir\a
// mkdirs() 创建文件夹,没有就创建 d:\dir\dir\a
// delete() 删除文件及文件夹
File file3 = new File("2.txt");
try {
file3.createNewFile();//创建文件
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(file3.exists());
//创建文件夹
File file4 = new File("C:\\Users\\25120\\IdeaProjects\\java\\src\\zifuliu\\aa");
file4.mkdir();
System.out.println(file4.exists());
//判断是否有文件夹没有就创建
File file5 = new File("C:\\Users\\25120\\IdeaProjects\\java\\src\\zifuliu\\aa\\bb");
file5.mkdirs();
//删除文件及文件夹
File file6 = new File("C:\\Users\\25120\\IdeaProjects\\java\\src\\zifuliu\\aa\\bb");
file6.delete();
File file7 = new File("C:\\Users\\25120\\IdeaProjects\\java\\src\\zifuliu\\2.txt ");
file7.delete();
}
}
File类遍历目录方法
-
public String[] list() :返回⼀个 String 数组,存储的是File ⽬录中所有的⼦⽂件或⼦⽬录的名称。
-
public File[] listFiles() :返回⼀个 File 数组,存储的是File ⽬录中所有的⼦⽂件或⼦⽬录的路径的 File 对象
public class Test03 {
public static void main(String[] args) {
//File类遍历目录方法
//String [] list() 取文件及文件夹名
//File[] listFiles() 取文件及文件夹对象
File file8 = new File("C:\\Users\\25120\\IdeaProjects\\java\\src\\zifuliu");
String[] str =file8.list();
for (String s:str){
System.out.println(s);
}
File[] file9 =file8.listFiles();
for (File f:file9){
System.out.println(f.getAbsolutePath());//获取的是文件和文件夹的绝对路径
}
}
}
递归
递归的概念
-
⽣活中的递归 : 放⽺ -- 赚钱 -- 盖房⼦ -- 娶媳妇 -- ⽣娃 -- 放⽺ -- 赚钱-- 盖房⼦ -- 娶媳妇 -- ⽣娃 -- 放⽺ ...
-
程序中的递归 : 指在当前⽅法内调⽤⾃⼰的这种现象。
-
递归的注意事项:
-
递归要有出⼝ ( 结束⽅法 ), 否则会报栈内存溢出错误StackOverflowError
-
递归的出⼝不能太晚了
public class Test04 {
static int i =0;
public static void main(String[] args) {
System.out.println("递归");
// 自己调用自己程序方法调用自己
// 递归要有停止的条件,没有就会报错StackOverflowError
// 递归出口不能太晚。
method();
}
static void method(){
if (i==5) {
return;
}
i++;
System.out.println("执行这个方法了"+i);
method();
}
}
递归累和
num的累加和 = num + (num-1)的累和,所以可以把累加和的操作定义成⼀个⽅法,递归调⽤。
public class Test05 {
public static void main(String[] args) {
int sum = mehod(5);
System.out.println(sum);
int j = mehod1(5);
System.out.println(j);
}
static int mehod(int n){
if (n ==1) {
return 1;
}
return n+mehod(n-1);
}
static int mehod1(int n) {
if (n == 1){
return 1;
}
return n*mehod(n-1);
}
}
文件搜索
- 目录搜素,无法判断多少级目录,所以使用递归,遍历所有目录
- 遍历目录时,获取的子文件,通过文件名称,判断是否符合条件
public class Test06 {
//文件搜索
public static void main(String[] args) {
File file1 = new File("C:\\Users\\25120\\IdeaProjects\\java\\src\\zifuliu");
findFild(file1);
}
public static void findFild(File file){
File[] file2 = file.listFiles();//取出当前文件夹中的所有文件及文件夹的对象
if (file2 != null) {
for (File f:file2){
//判断是不是文件如果是的话就判断他的后缀是不是png的
if (f.isFile()&&f.getName().endsWith(".png")){
System.out.println(f.getAbsolutePath());
}
//如果是文件夹,就继续搜索
if (f.isDirectory()){
findFild(f);
}
}
}
}
}