java中的File类详解

一.概述

java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。

二.常用方法

1.构造方法

方法 说明
public File(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
pubblic File(File parent, String child) 从父抽象路径名和子路径名字符串创建新的 File实例。
public File(String parent, String child) 从父路径名字符串和子路径名字符串创建新的 File实例

构造方法举例如下:

import java.io.File;
public class Test {

	public static void main(String[] args) {
		String pathname1 = "D://a";
		String pathname2 = "aa.txt";
		//file1用来抽象表示D盘下的a目录
		File file1 = new File(pathname1);
		//file2用来抽象表示D盘下的a目录下的aa.txt文件
		File file2 = new File(pathname1,pathname2);
		//file3用来抽象表示D盘下的a目录下的aa.txt文件
		File file3 = new File(file1,pathname2);
	}
}

对于上面的代码来说,file1,file2,file3都可以用来抽象表示该路径的某个目录或文件,注意这里的抽象是指无论该路径下是否存在该目录或文件,File类的实例都可以代表该路径下的目录或文件,如果不存在,后期可以通过File的普通方法进行创造。

2.常用普通方法

2.1创建和删除方法:
方法 说明
public boolean createNewFile() 当且仅当具有该名称的文件尚不存在时,创建一个由该抽象路径名命名的新的空文件
public boolean mkdir() 创建由此File对象所表示的目录。当且仅当目录为空时才可删除目录
public boolean mkdirs() 创建由此File对象所表示的目录。包括任何不存在的父级目录
public boolean delete() 删除该File对象所表示的目录或文件
2.2查看File类对象信息方法:
方法 说明
public String getName() 获得由此File对象表示的文件或目录的名称。
public long length() 获得由此File对象表示的文件的长度
public String getAbsolutePath() 获得由此File对象表示的文件或目录的绝对路径
public File getAbsolutePath() 获得此抽象路径名的绝对形式的File对象
public String getPath() 将此File对象的抽象路径转换为路径名字符串。

绝对路径:从盘符开始到该文件名结束的一个完整路径,
相对路径:相对于该项目目录的不完整的路径。

2.3判断方法:
方法 说明
public boolean isAbsolute() 测试这个抽象路径名是否是绝对的
public boolean isDirectory() 测试此抽象路径名表示的文件是否为目录
publicboolean isFile() 测试此抽象路径名表示的是否为文件
public boolean exists() 测试此抽象路径名表示的文件或目录是否实际存在
pulic boolean isHidden() 测试此抽象路径名命名的文件是否为隐藏文件
2.3遍历方法:
方法 说明
public String[] list() 返回一个String数组,表示该File对象表示的目录中的所有子文件或目录的字符串形式
public File[] listFiles() 返回一个File数组,表示该File目录中的所有的子文件或目录的File对象形式

三.常用方法的使用(经典例题)

1.遍历一个目录下的所有文件和目录(方法一)

import java.io.File;
public class FileTest {
	public void showDir(File file) {
		File []files = file.listFiles();
		//返回一个File数组,表示该File目录中的所有的子文件或目录
		if(files != null && files.length !=0) {
		////为文件时,files为null,,,,当是空目录时候,files.length = 0
			for(File f : files) {
				showDir(f);
			}
		}
		System.out.println(file);
	}

	public static void main(String[] args) {
		FileTest ft = new FileTest();
		ft.showDir(new File("D://a"));
	}
}

运行结果:
D:\a\a1\a11
D:\a\a1\a11.txt.txt
D:\a\a1
D:\a\a2\a22.txt.txt
D:\a\a2
D:\a\a3

2.遍历一个目录下的所有文件和目录(方法二)

import java.io.File;
//方法二:遍历一个目录下的所有文件和目录
public class FileTest1 {
	public void showDir(File file) {
		File[] files = file.listFiles();
		for (File f : files) {
			if(f.isFile()) {
				System.out.println("文件:"+f);
			}else {
				this.showDir(f);
				System.out.println("目录:"+f);
			}
		}
	}
	public static void main(String[] args) {
		FileTest1 ft = new FileTest1();
		ft.showDir(new File("D://a"));
	}

}
运行结果:
目录:D:\a\a1\a11
文件:D:\a\a1\a11.txt.txt
目录:D:\a\a1
文件:D:\a\a2\a22.txt.txt
目录:D:\a\a2
目录:D:\a\a3

3.按层次遍历一个文件的父级目录

package File类;
import java.io.File;
public class FileTest {
	public void showParent(File file) {
		File parentFile = file.getParentFile();
		if(parentFile != null) {
		    System.out.println(parentFile);
		    showParent(parentFile);
		}
	}
	public static void main(String[] args) {
		FileTest ft = new FileTest();
		ft.showParent(new File("D://a//a1//a11//ooo.txt.txt"));
	}
}

运行结果:
D:\a\a1\a11
D:\a\a1
D:\a
D:\

4.删除一个目录下 的所有文件以及目录

package File类;

import java.io.File;

//递归删除一个目录下 的所有文件以及目录
public class FileTest2 {
	
	public void deleteDir(File file) {
		File[] files = file.listFiles();
		if(files != null && files.length !=0) {
		////为文件时,files为null,,,,当是空目录时候,files.length = 0
			for (File file2 : files) {
				deleteDir(file2);
			}
		}
		file.delete();
	}
	public static void main(String[] args) {
		
		File file = new File("D://a");
		FileTest2 ft2 = new FileTest2();
		ft2.deleteDir(file);
		System.out.println("删除成功");
	}
}
运行结果:
删除成功 
注:D盘a目录下的所有文件以及目录被删除,delete()方法只能删除空目录或文件

5.搜索 D:\a 目录中的 .txt结尾的文件。

package File类;

import java.io.File;

//搜索一个目录下以后缀名为.txt的所有文件
public class FileTest3 {
  public static void findFile(File file) {
  	File files[] = file.listFiles();
  	for(File file1: files) {
  		if(file1.isFile()) {
  			if(file1.getName().endsWith(".txt")) {
  				System.out.println("以.txt结尾的文件:"+file1.getAbsolutePath());
  			}
  		}else {
  			findFile(file1);
  		}
  	}
  }
  public static void find(File file) {
  	File[] files = file.listFiles();
      if(files != null && files.length !=0) {
  	////为文件时,files为null,,,,当是空目录时候,files.length = 0
  		for (File file1 : files) {
  			find(file1);
  		}
  	}else {
  		if(file.getName().endsWith(".txt")) {
  			System.out.println("以.txt结尾的文件:"+file.getAbsolutePath());	
  		}
  	}
  }
  
  public static void main(String[] args) {
  	File file = new File("D://a");
  	//findFile(file);
  	find(file);
  }
}
运行结果:
以.txt结尾的文件:D:\a\a1\新建文本文档.txt
以.txt结尾的文件:D:\a\a2\a22.txt.txt
以.txt结尾的文件:D:\a\a4\a44\1.txt

猜你喜欢

转载自blog.csdn.net/weixin_43951932/article/details/87889881