File和FileFilter

本文介绍了Java中IO流的概念及其实现文件操作的方法,包括文件的创建、删除、查询等基本操作,并详细讲解了如何使用File类进行路径管理、文件过滤及文件遍历。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

File文件

  • IO流其实就是java程序与计算机上(或者网络上的文件),进行交互的抽象过程。
  • IO流通过java程序操作计算机上的文件或者文件夹
  • Windows操作系统使用dos命令来操作计算机上的文件。

一.File

在这里插入图片描述

  • 该类用来表示文件的路径

  • 路径分为:
    相对路径:有一个参考目标,以参考目标为例,相对于目标的位置。
    绝对路径:能够直接准确定位到的位置,哪个盘符下。

  • 在java程序中,如果要将文件放到相对于该程序的位置时(将文件放到程序中),放到项目的根目录下或者根目录下的子目录(不可以放到src下)。

  • URL,URI:统一资源定位符。
    URI:只能进行位置的确定,只能得到路径是什么 。
    URL:可以获取文件位置,可以使用IO流进行网络资源的获取(url做网络爬虫 )。

二.对文件的操作(文件和文件夹)

  • 对文件的操作:新建、删除、查询

构造方法

  1. File(File parent, String child) 根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
  2. File(String pathname) 通过将给定路径名字符串转换成抽象路径名来创建一个新 File 实例。
  3. File(String parent, String child) 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
@Test
	void file02() {
		//两个参数的构造方法,拼接
		File file = new File("D:\\Java1");
		File file01=new File(file,"zuoye\\laoshi.java");
		System.out.println(file01.getAbsolutePath());//D:\Java1\zuoye\laoshi.java
		File file02=new File("D:\\Java1","zuoye\\laoshi.java");
		System.out.println(file02.getAbsolutePath());//D:\Java1\zuoye\laoshi.java
	}
  1. File(URI uri) 通过将给定的 file: URI 转换成一个抽象路径名来创建一个新的 File 实例。
// 使用URL获取资源:资源下载
		@Test
		void file05() {
			try {
				URL url=new URL("https://tse1-mm.cn.bing.net/th?id=OIP.Tlumx9iXVC4rqPbISLZaRQHaF7&w=211&h=160&c=8&rs=1&qlt=90&dpr=1.61&pid=3.1&rm=2");
				URLConnection openConnection = url.openConnection();
				InputStream inputStream = openConnection.getInputStream();
				FileOutputStream out=new FileOutputStream(new File("java.jpg"));
				byte[] bytes=new byte[1024*1000];
				inputStream.read(bytes);
				out.write(bytes);
				out.close();
				inputStream.close();
				System.out.println("文件下载完成");
				
			} catch (MalformedURLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

常用方法

  1. String
    getName() 返回由此抽象路径名表示的文件或目录的名称。
  2. String
    getAbsolutePath() 返回抽象路径名的绝对路径名字符串。
@Test
	void file01() {
		//实例化,相对路径和绝对路径\是转义符
		File file = new File("PrizeDome.java");//文件的相对路径
		File file01 = new File("D:\\Java1\\Workspace\\java数据\\src\\com\\xingyun\\zuoye");//文件夹
		// 获取所指的文件或者文件夹的名字
		System.out.println(file.getName());//PrizeDome.java
		System.out.println(file01.getName());//zuoye
		// 获取所指文件或文件夹在电脑中的绝对位置
		System.out.println(file.getAbsolutePath());//D:\Java1\Workspace1\IO\PrizeDome.java
		System.out.println(file01.getAbsolutePath());//D:\Java1\Workspace\java数据\src\com\xingyun\zuoye
	}
  1. String
    getPath() 将此抽象路径名转换为一个路径名字符串。
  2. boolean
    isAbsolute() 测试此抽象路径名是否为绝对路径名。
  3. boolean
    isDirectory() 测试此抽象路径名表示的文件是否是一个目录。
  4. boolean
    isFile() 测试此抽象路径名表示的文件是否是一个标准文件。
  5. boolean
    isHidden() 测试此抽象路径名指定的文件是否是一个隐藏文件。
  6. boolean
    exists() 测试此抽象路径名表示的文件或目录是否存在。
  7. long
    length() 返回由此抽象路径名表示的文件的长度。
@Test
	void file01() {
		File file01 = new File("D:\\Java1\\Workspace\\java数据\\src\\com\\xingyun\\zuoye\\PrizeDome.java");
		System.out.println("是不是绝对路径:"+file01.isAbsolute());//是不是绝对路径:true
		System.out.println("是不是目录:"+file01.isDirectory());//是不是目录:false
		System.out.println("是不是文件:"+file01.isFile());//是不是文件:true
		System.out.println("是否是隐藏文件:"+file01.isHidden());//是否是隐藏文件:false
		System.out.println("文件是否存在:"+file01.exists());//文件是否存在:true
		System.out.println("文件的长度为"+file01.length());//文件的长度为2392
	}
  1. boolean
    delete() 删除此抽象路径名表示的文件或目录。
  2. boolean
    **mkdir()**创建此抽象路径名指定的目录。 一级目录
  3. boolean
    mkdirs() 创建此抽象路径名指定的目录,包括创建必需但不存在的父目录。 多级目录
  4. boolean
    createNewFile() 当且仅当不存在具有此抽象路径名指定的名称的文件时,原子地创建由此抽象路径名指定的一个新的空文件。
@Test
	void file02() {
		File file01 = new File("D:\\Java1\\Workspace\\java数据\\src\\com\\xingyun\\zuoye\\PrizeDome.java");
		//删除
		boolean delete = file01.delete();
		System.out.println("是否删除成功:"+delete);
		//创建文件
		File newfile=new File("D:\\Java1\\Workspace\\test");
		boolean mkdir = newfile.mkdir();//一级目录
		boolean mkdirs = newfile.mkdirs();//多级目录
		System.out.println("是否成功创建文件夹"+mkdir);
		System.out.println("是否成功创建文件夹"+mkdirs);
		File newfile01=new File("D:\\Java1\\Workspace\\文本.docx");
		try {
			boolean createNewFile = newfile.createNewFile();
			System.out.println("是否成功创建文件:"+createNewFile);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
  1. String[]
    list() 返回由此抽象路径名所表示的目录中的文件和目录的名称所组成字符串数组。
  2. String[]
    list(FilenameFilter filter) 返回由包含在目录中的文件和目录的名称所组成的字符串数组,这一目录是通过满足指定过滤器的抽象路径名来表示的。
  3. File[]
    listFiles() 返回一个抽象路径名数组,这些路径名表示此抽象路径名所表示目录中的文件。
  4. File[]
    listFiles(FileFilter filter) 返回表示此抽象路径名所表示目录中的文件和目录的抽象路径名数组,这些路径名满足特定过滤器。
  5. File[]
    listFiles(FilenameFilter filter) 返回表示此抽象路径名所表示目录中的文件和目录的抽象路径名数组,这些路径名满足特定过滤器。
  6. static File[]
    listRoots() 列出可用的文件系统根目录。
//查找,遍历
	@Test
	void file03() {
		File file= new File("D:\\Java1\\Workspace\\java数据\\src\\com\\xingyun");
		int count=0;
		if(file.exists()) {
			System.out.println("文件或文件夹存在");
			if(file.isDirectory()) {
				System.out.println("它是一个目录");
				// 获取该目录的所有文件和文件夹
				String[] list = file.list();// 获得的内容全是文件或者文件夹的名字 字符串形式
				for (String string : list) {
					count++;
					System.out.println(string);
				}
				System.out.println("该目录总共有"+count+"个文件");
			}else {
				System.out.println("是一个文件");
			}
		}else {
			System.out.println("文件或文件夹不存在");
		}
	}
	@Test
	void file04() {
		File file= new File("D:\\Java1\\Workspace\\java数据\\src\\com\\xingyun");
		String[] list = file.list();
		for (String string : list) {
			//只要后缀为jpg格式的
			if(string.endsWith("jpg")) {
				System.out.println(string);
			}
		}
	}
	@Test
	void file05() {
		File file= new File("D:\\Java1\\Workspace\\java数据\\src\\com\\xingyun");
		String[] list = file.list();
		System.out.println(list.length);
		File[] listFiles = file.listFiles();
		System.out.println(listFiles.length);
	}
  • 使用递归进行文件内容的遍历
public class DiGuiDemo {
	static int count=0;
	public static void main(String[] args) {
		File file= new File("D:\\Java1\\Workspace\\java数据\\src\\com\\xingyun");
		getFile(file);
		System.out.println("总数有"+count);
	}
	public static void getFile(File file) {
		 if(file.exists()){
			  if(file.isDirectory()) {
				  File[] listFiles = file.listFiles();
				  for (File file2 : listFiles) {
					   //递归 
					    getFile(file2);
				  }
			  }else {
				  if(file.getName().endsWith("java")) {
					  System.out.println(file.getName());
					  count++;
				  }
				 
			  }
		 }
		 
	 }
	}

三.文件过滤器 FileFileter

  • 函数式接口

常用方法

  1. boolean
    accept(File pathname) 测试指定抽象路径名是否应该包含在某个路径名列表中。
public class FileFiter01 {
	@Test
	void  fileFilter01() {
		//实例化file
		File file=new File("D:\\Java1\\Workspace\\java数据\\src\\com\\xingyun");
		// 使用过滤器进行过滤
		File[] listFiles = file.listFiles(new FileFilter() {

			@Override
			public boolean accept(File pathname) {
				// TODO Auto-generated method stub
				if(pathname.getName().endsWith("java")) {
					return true;
				}
				return false;
			}
			
		});
		System.out.println(listFiles.length);
		for (File file2 : listFiles) {
			System.out.println(file2);
		}
	}
	@Test
	void  fileFilter02() {
		//实例化file
		File file=new File("D:\\Java1\\Workspace\\java数据\\src\\com\\xingyun");
		// 使用过滤器进行过滤
		File []listFiles =file.listFiles((File name) ->{  
			if(name.getName().endsWith("java")) {
				return true;
			}
				return false;
			}
			
		);
		System.out.println(listFiles.length);
		for (File file2 : listFiles) {
			System.out.println(file2);
		}
	}
	@Test
	void  fileFilter03() {
			File file=new File("D:\\Java1\\Workspace\\java数据\\src\\com\\xingyun");
			File []files =file.listFiles(new MyFilter());
			System.out.println(files.length);
			for (File file2 : files) {
				System.out.println(file2.getName());
			}
			
		}
	}

	// 自定义过滤器  
	class  MyFilter implements FileFilter{
		@Override
		public boolean accept(File pathname) {
			if(pathname.getName().endsWith("zip")) {
				return true;
			}
			return false;
		}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值