JAVA---File类

目录

概念:

流和File类

方法:

构造方法

创建功能

删除文件

判断功能

 获取功能方法

例子:

list和listFiles()、过滤器

list过滤器

listFiles应用-递归

示例二:删除文件-递归


概念:

  • 用来将文件或者文件夹封装成对象
  • 方便对文件与文件夹进行操作
  • File对象可以作为参数传递给流的构造函数
  • 了解File类中的常用方法

流和File类

流只能操作数据,而要想操作文件,需要File类

(注意:java的File类对Windows系统上的隐藏文件不一定有操作权限,但是操作的时候,会把隐藏文件也操作上,为了避免错误,需要加以判断,是否是隐藏文件)

方法:

构造方法

1.File(String path)
将一个字符串描述的路径,封装成一个 File对象。
2.File(String parent,String Child)
将两个字符串(父级路径, 子级路径),拼接之后形成的路径封装成一个File对象。
3.File(File parent, String child)
将File类型的父级路径和String类型的字节路径拼接成一个新路径,封装成File对象

创建功能

1、说明:
最终创建出来的是一个文件还是文件夹,不取决于路径名称
取决于调用的什么方法去创建
2、创建文件:

//在指定位置创建文件,如果该文件已经存在,则不创建,返回false,和输出流不一样,输出流对象一建立创建文件,而且文件已经存在,会覆盖
  createNewFile();

3、创建文件夹:

     mkdir()
          创建文件夹,如果父级路径不存在,则文件夹创建失败,只能创建一级目录
     mkdirs()
          创建文件夹,如果父级路径不存在,则自动创建父级路径,再创建子级路径,可以创建多级目录


删除文件

boolean delete();  //删除失败返回false
void deleteOnExit();在程序退出时删除指定文件

判断功能

  • exists(),判断调用者路径是否存在
  • isFile(),判断调用者是否是一个文件
  • isDirectory(),判断调用者是否是一个文件夹

 获取功能方法

  • public String getAbsolutePath() : 返回此File的绝对路径名字符串
  • public String getPath() : 将此File转换为路径名字符串
  • public String getName() : 返回由此File表示的文件或目录的名称
  • public long length() : 返回由此File表示的文件的长度
     

例子:

import java.io.File;

public class FileDemo {
    public static void main(String[] args) {
        
                //创建文件对象
                File file = new File("Test22.java");//创建文件对象,将其封装成file类对象,就可以调用file类的方法了
                
                String absPath1 = file.getAbsolutePath();//获取文件的绝对路径,即全路径 返回的是String对象
                File absPath2 = file.getAbsoluteFile();//获取文件的绝对路径,即全路径 返回的是File对象
                
                String path = file.getPath();//File中封装的路径是什么获取到的就是什么。
                
                String filename = file.getName();//获取文件名称
                
                long size = file.length();//获取文件大小
                
                System.out.println("absPath1="+absPath1);
                System.out.println("absPath2="+absPath2);
                System.out.println("path="+path);
                System.out.println("filename="+filename);
                System.out.println("size="+size);
    }
}

list和listFiles()、过滤器

public class FileMethodDemo3 {
    public static void main(String[] args) {
        File dir = new File("e:\\java_code");
        //获取的是目录下的当前的文件以及文件夹的名称。
        String[] names = dir.list();
        for(String name : names){
            System.out.println(name);
        }
        //获取目录下当前文件以及文件对象,只要拿到了文件对象,那么就可以获取其中想要的信息
        File[] files = dir.listFiles();
        for(File file : files){
            System.out.println(file);
        }
    }
}

注意:在获取指定目录下的文件或者文件夹时必须满足下面两个条件

1,指定的目录必须是存在的,

2,指定的必须是目录。否则容易引发返回数组为null,出现NullPointerException

 

list过滤器

要用到接口FilenameFilter,实现此接口的类示例可用于过滤器文件名,可以自己定义一个过滤器,实现此接口

//获取e:\\java文件夹下,文件名后缀是bmp的文件
public class FileMethodDemo 
{
    public static void main(String[] args) 
    {
        File dir = new File("e:\\java");
        

        String[] names = dir.list(new FilenameFilter()
        {    
            //dir为你要删选文件的路径,name为你要删选的文件名称
            public boolean accept(File dir,String name)
            {
                return name.endsWith(".bmp");
            }    

        });     
    }
}

listFiles应用-递归

/*需求
列出指定目录下文件或者文件夹,包含子目录中的内容,也就是列出指定目录下所有内容
因为目录中还有目录,只要使用同一个列出目录功能的函数完成即可
在列出过程中出现的还是目录的话,还可以再此调用本功能,也就是函数自身调用自身
这种表现形式或者编程手法称为递归

递归要注意:
1.限定条件
2.注意递归次数,要避免内存溢出
*/
class FileMethodDemo {
    public static void main(String[] args) 
    {
        File dir = new File("e:\\java");
        
        showDir(dir);
        
    }

    public static void showDir(File dir)
    {
        System.out.println(dir);
        Filep[] files =dir.listFiles();

        for(int x=0;x<files.length;x++)
        {
            //如果是目录的话,继续往里面进
            if(files[x].isDirectory())
                showDir(files[x]);
            else
                System.out.println(files[x]);
        }    

    }
}

示例二:删除文件-递归

/*
删除原理:在windows中,删除目录从里面往外删除的,既然是从里往外删除,就需要用到递归
*/

class FileMethodDemo {
    public static void main(String[] args) 
    {
        File dir = new File("e:\\java");
        
        removeDir(dir);
        
    }

    public static void removeDir(File dir)
    {
        
        Filep[] files =dir.listFiles();

        for(int x=0;x<files.length;x++)
        {
            //如果是目录的话,继续往里面进
            if(files[x].isDirectory())
                removeDir(files[x]);
            else
                System.out.println(files[x].toString()+":-file-:files[x].delete()");
        }    
        System.out.println(dir+"::dir::"+dir.delete());
    }
}

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值