IO流前提——学习File

File(文件对象)

IO流意味着输入输出,就是磁盘文件、内存等其他与程序进行交互(读数据,写数据)
常见的如记事本的保存功能:
在这里插入图片描述
点击保存就是将字符写到文件中永久保存

开发中常见的就是将日志文件保存

File介绍

java中的File类描述的是计算机中的文件和文件夹
而不只是文件

  1. 构造方法
public File(File parent,String child) //文件的抽象路径名(文件的路径+文件名)
public File(String pathname) 
public File(String parent,String child) // parent + child 就是上面的pathname

创建File对象

以下只是抽象路径的描述,而不是真的在磁盘上创建了一个文件或者文件夹

File  file1 = new File("C:/test.txt"); //不代表的文件
File  file2 = new File("C:/xx"); //此处不代表是文件夹

创建文件

这里是真正的在计算机上创建了一个文件
用到的方法 :public boolean createNewFile()throws IOException
Code:

File file1 = new File("C:/test.txt"); 
file1.createNewFile(); //这里表示在C盘创建了一个test.txt的文件
File file = new File("C:/xx");
file.createNewFile(); //在C盘下创建了一个xx的文件,注意:这里不是文件夹,还是文件,只是没有后缀名而已

注意事项:

1.需要File对象调用:根据File对象中的pathname来创建文件
2.如果文件已经存在,返回false
3.如果文件路径不存在,抛出IO异常
4.此方法只能够创建文件,不会创建文件夹

创建文件夹

这里是真正的在计算机上创建了一个文件
用到的方法 :
1.public boolean mkdir() //创建目录,但是不能创建父路径
2.public boolean mkdirs() //会创建父路径

具体见代码

Code:

File file1 = new File("C:/a"); 
file1.mkdir(); //这里表示在C盘创建了一个a的文件夹
File file = new File("C:/xx/oo");
file.mkdir(); //此处会报错,因为c盘中没有xx的目录(就是上面说的父路径)

File file = new File("C:/xx/oo");
file.mkdirs();  //创建成功,会在C盘创建xx,  xx下面创建oo

删除文件

不管文件夹还是文件,都可以调用此方法删除
 **Method:**
public boolean delete()

注意事项:

1.需要File对象来调用(把File对象所关联的文件从磁盘上面删除)
2.如果是删除文件夹,必须是空文件夹
3.文件就直接删除
4.希望 : 有一个方法可以直接删除文件和文件夹(包括子文件夹和文件的)

直接删除文件和文件夹(包括子文件夹和文件的)

递归删除

/**
	 * 删除当前目录及其下面的目录和文件
	 * @param file 删除承成功返回true,
	 * 如果file==null,返回false,如果file不存在,返回false
	 */
	public static boolean deleteAll(File file) {
		//判断文件是否为null
		if (file == null)
			return false;
		if (!file.exists())
			return false;
		if (file.isFile())
			file.delete();
		if (file.isDirectory()) {
			//得到文件夹所有的文件
			File[] listFiles = file.listFiles();
			for (File file2 : listFiles) {
				deleteAll(file2);
			}
		}
		
		return file.delete();
	}

File基本方法及应用

public boolean isDirectory()  //判断是否是一个目录
public boolean isFile() 	//判断是否是一个文件
public boolean exists()  //测试此抽象路径名表示的文件或目录是否存在 

public static File[] listRoots() // 列出可用的文件系统根(操作系统上面的盘符)
作用: 先判断电脑上有哪些盘符,然后在制定的位置创建文件夹或者文件
public String[] list() //返回当前的文件夹对象下面一层的所有的文件(文件夹)的名字
public File[] listFiles() //返回当前的文件夹对象下面一层的所有的文件(文件夹)(File对象的形式)
其他请查API

Code:

public static void main(String[] args) {
		File file = new File("C:\\Users\\maple\\Desktop\\itsourcejava\\xx\\oo");
		List<File> fileFilter = fileFilter(file, "txt");
		System.out.println(fileFilter);
	}
	
	/**
	 * 返回当前目录下过滤后的文件
	 * @param file 抽象路径
	 * @param suffix 后缀名(什么格式的)
	 */
	public static List<File> fileFilter(File file, String suffix) {
		if (file == null)
			return null;
		if (!file.exists())
			return null;
//		 *1.获取到当前目录下的所有file对象 
		File[] listFiles = file.listFiles();
		//获取到的有可能为null
		if (listFiles == null)
			return null;
		//如果不是null
		//判断是否是空目录
		if (listFiles.length <= 0)
			return null;
		List<File> list = new ArrayList<>();
//		 *2.判断是不是文件,文件才有后缀名
		for (File fi : listFiles) {
			if (fi.isFile()) {
//		 *3.判断是不是以suffix结尾的,如果是加入到集合中
				if (fi.getName().endsWith("."+suffix))
					list.add(fi);
			}
		}
		
		return list;
		
	}


列出隐藏文件

	/**
	 * 列出所有隐藏文件
	 * @param file 抽象路径
	 */
	public static List<File> listHiddenFiles(File file) {
		if (file == null)
			return null;
		if (!file.exists())
			return null;
		//*1.获取到当前目录下的所有file对象 
		File[] listFiles = file.listFiles();
		//获取到的有可能为null
		if (listFiles == null)
			return null;
		//如果不是null
		//判断是否是空目录
		if (listFiles.length <= 0)
			return null;
		
		List<File> list = new ArrayList<>();
//		 *2.判断是不是文件
		for (File fi : listFiles) {
			if (fi.isFile()) {
//		 *3.判断是否是隐藏文件
				if (fi.isHidden()) {
					list.add(fi);
				}
			}
		}
		
		return list;
	}

文件名和文件过滤器

调用的时候指定具体的过滤器来得到我们想要的一个目录下面的东西
过滤器的接口(FilenameFilter,  FileFilter)
具体实现需要自己继承接口覆写方法
**Method:**
String[] list(FilenameFilter filter) 
File[] listFiles(FileFilter filter)  
File[] listFiles(FilenameFilter filter)
**Code:**
我这里采用的是匿名内部类,就没有再写一个类去实现了
public static void main(String[] args) {
		File file = new File("C:\\Users\\maple\\Desktop\\itsourcejava\\xx\\oo");
		//返回所有过滤的文件名
		String[] list = file.list(new FilenameFilter() {
			
			@Override
			public boolean accept(File dir, String name) {
				//判断文件名是否是以.txt结尾的
				return name.endsWith(".txt");
			}
		});
		System.out.println(Arrays.toString(list));
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值