File类理解


File类

     File类一般和流一起使用,流操作数据,file类操作文件和文件夹。

它将文件和文件夹封装成类,提供一些方法,如下:

一.基础

  1.创建

           booleancreateNewFile():在指定位置创建文件,如果该文件已经存在,则不创建,返回false 和写入流不一样,写入流创建文件会覆盖已经存在的文件。

案例 :

    File f=newFile("a.txt");

    f.createNewFile();

创建一级目录

   File dir=newFile("abc");

   dir.mkdir();

创建多级目录

   dir.mkdirs();

 

2.删除

   booleanf.delete(); 删除失败,返回false,可能不能删除

 

3.判断 :在判断文件对象是都是文件或者目的时候,必须要先判断该文件对象封装的内容是否存在。

   File f=newFile("a.txt");

   f.exits();返回boolean  文件是否存在

   是否是目录

   f.isDirectory();

   是否是文件

   f.isFile();

   是否是隐藏的

   f.isHidden();

   是否是绝对路径

   f.isAbsolute();

 

4.获取信息。

   getName()   //获取名称

   getpath()    //获取路径

  getAbsolutePath() //获取绝对路径

   getParent() //获取绝对路径下的父路径,如果获取的是相对路径返回null,如果相对路径中由上一级目录,该目录就是结果。

   lastModified()//获取最后一次修改时间

   length();//获取体积大小

5.其他

   renameTo();改名,重命名,如果修改路径的话,同时路径也会修改

   f1.renameTo(f2);

二.重要代码理解:过滤器 ,递归深度遍历 , Properties集合+IO流

 (1)过滤器

一个目录文件下可以存储很多种类的文件,使用过滤器,就可以拿到自己想要类型的文件。Java把过滤器封装到FilenameFilter接口中。定义一个类实现他复写accept方法,就可以了。如果下代码:

public class MyFilterJava implements FilenameFilter {
	    	 @Override
	    	 public boolean accept(File dir, String name) {
	    	 //
	    	 System.out.println(dir+"---"+name);
	    	 return name.endsWith(".java");
	    	 }
	    	 }
这就是一个过滤后缀名为java 过来器。
应用:
    public static void listDemo() {
	    	 File dir = new File("c:\\");
	    	 File[] files = dir.listFiles(new MyFilterJava ());
	    	 for(File file : files){
	    	 System.out.println(file);
	    	 }
	    	 }
(注意:将过滤器作为参数传个listFiles,那么他返回的文件对象就只有后缀名为java的文件)

(2)递归深度遍历

       (遍历文件目录,遍历文件夹,删除文件,删除文件夹)

       (a)文件下的目录遍历:(基础)

      . listFiles();返回当前路径下的文件对像(不包括子目录

 FIle dir=new File("c:\\"); 
		     File[] files=dir.listFiles();
		     for(File f : files)
		      {
		          System.out.println(f.getname());
		}

(b).遍历文件夹下的目录
列出指定目录下所有内容:使用递归,函数自己调用自己。

public static void main(String[] args) {
    	File dir = new File("c:\\a");

	 getAllFiles(dir);

	public static void getAllFiles(File dir) {
	    //封装对象
	File[] files =dir.listFiles();
//	System.out.println(files);
//遍历,因为要在遍历中操作 ,我们就不用增强for循环。 是数字,有角标,可以循环
	for(int x=0;x<files.length;x++){
		if(files[x].isDirectory()){
			getAllFiles(files[x]);
		}else
		System.out.println(files[x].getName());
	}
	
}
  

(c)删除文件
     FIle dir=new File("c:\\"); 
	     File[] files=dir.listFiles();
	     for(File f : files)
	      {
	          f.delete();
	}
(d)删除文件夹:

	public static void main(String[] args) {
    	File dir = new File("c:\\a");//a是一个多极目录
	  //怎么将这个目录删掉。
		 DeleteFiles(dir);

	}

private static void DeleteFiles(File dir) {
	/*思路:在java中删除是从里往外删除的,所以我们要遍历这个目录,用递归的思想从里面往外删。
	 *    1.遍历目录。
	 *    2.遍历出来的还是目录就在遍历一次,不是目录就删掉。
	 *    */
	     //获取目录下的文件和文件夹
	File[] files =dir.listFiles();
	//遍历判断删除
	for(int x=0;x<files.length;x++){
		//判断是不是目录
		if(files[x].isDirectory()){
			 DeleteFiles(files[x]);
		}else
			files[x].delete();
	}
	dir.delete();
}

(注意) 文件的删除是从里往外删的(重点)


(3)Properties集合+IO流

     Properties是什么?

一个可以将键值进行持久化存储的对象。Map--Hashtable的子类。

特点:1.就是可以从流中读数据,也可以将数据些入流中。

     2.可以持久化存储数据。(存入硬盘中)

     3.键值都是字符串。

     4.一般用于配置文件。

有3个常用的方法:

 load():将流中的数据加载进集合。

原理:其实就是将读取流和指定文件相关联,并读取一行数据,因为数据是规则的key=value,所以获取一行后,通过 = 对该行数据进行切割,左边就是键,右边就是值,将键、值存储到properties集合中。

|-- store():写入各个项后,刷新输出流。

|-- list():将集合的键值数据列出到指定的目的地。

 

  经典练习:记录一个程序运行次数,超过5次提示注册。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值