java之File类

本文详细介绍了Java中的File类,包括其构造方法、常用方法、递归使用、文件过滤器等内容。File类用于文件和目录的创建、查找和删除,提供了获取文件路径、名称、长度、是否存在等属性的方法,以及创建、删除、遍历目录的功能。此外,还讨论了如何使用过滤器来筛选特定类型的文件,并给出了实际示例。
摘要由CSDN通过智能技术生成

目录

 

概述

File构造方法

 File类常用方法

递归在FIle中的用法

 文件过滤器


概述

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

java把电脑中的文件和文件件封装为一个File类,我们可以使用File类对文件和文件夹进行操作(增删改查等)

注意File类是一个与系统无关的类,任何的操作系统都可以使用这个类中的方法

 

静态成员变量:

String pathSeparator:与系统有关的路径分隔符,为了方便,它被表示为一个字符串

在windows下是一个;   linux下是一个:

pathSeparator就是一个空字符串""+pathSeparatorChar

所以pathSeparatorChar结果一样,只不过是char类型

 

String separator:文件名称分隔符

windows下是\                 linux下是/

所以以后操作路径不能写死,要具有兼容性

separatorChar与上同理

 

路径:

绝对路径:以盘符开始的路径

相对路径:相对当前路径的路径

“./”:代表目前所在的目录。

“../”:代表上一层目录。

以”/”开头:代表根目录。

 

注意:

1、路径不区分大小写

2、路径中的文件名称分隔符windows使用/,反斜杠是转义字符,两个反斜杠代表一个普通的反斜杠

 

File构造方法

/*

        File(String pathname):通过将给定路径名字的字符串转换为抽象路径来创建一个新的File实例

        路径可以是以文件结尾,也可以是以文件夹结尾

        可以是绝对路径或相对路径

        路径可以存在,也可以不真实存在

        创建File对象,只是把字符串路径封装为File对象,不考虑路径的真假情况

        */

        File file=new File("D:\\program testing\\javatest\\JavaHHHLevel\\src\\io_file\\a.txt");

        //这里a.txt并不存在

        System.out.println(file);//打印路径

        /*

        File (String parent,String child)根据parent路径名称和child路径名称字符串创建一个File实例

        parent是父路径,child是子路径

        好处:

            父与子可以单独写,使用起来灵活,父子路径都可以变化

        */

        String parent="D:\\";

        String child="a.txt";

        File file1=new File(parent,child);

        System.out.println(file1);

        /*

        File(File parent,String child)根据parent抽象路径和child路径名称字符串创建一个新File实例

        File parent父路径

        String child子路径

        好处:

            父路径是File类型,可以使用File的方法对路径进行一些操作,再使用路径创建对象

        */

        File parentF=new File("C:\\");

        File file2=new File(parentF,"HelloWorld.java");

        System.out.println(file2);

 File类常用方法

public class FileMethod {

    @Test

    public void test01(){

        /*

获取功能:

String getAbsolutePath():返回此File的绝对路径名字符串

String getPath():将此File转换为路径名字符串

String getName():返回由此File表示的文件或目录名称

long length():返回由此File表示的文件的长度

 

*/

        //getAbsoluteFile方法测试

        //绝对路径测试

        File f1=new File("D:\\program testing\\javatest\\JavaHHHLevel\\src\\io_file\\a.txt");

        File absoluteFile = f1.getAbsoluteFile();

        //相对路径测试

        System.out.println(absoluteFile);

        File f2=new File("a.txt");

        System.out.println(f2.getAbsoluteFile());//a.txt返回当前目录的根目录

        //getPath测试

        //绝对路径,返回绝对路径

        System.out.println(f1.getPath());

        //相对路径,返回相对路径

        System.out.println(f2.getPath());

        //间接证明了toString方法调用的就是getPath方法

        //测试getName方法,获取的就是构造方法传递路径的结尾部分

        System.out.println(f1.getName());

        System.out.println(f2.getName());

        //测试length方法,返回的是构造方法中指定的文件的大小,以字节为单位

        /*注意:

                文件夹是没有大小概念的,不能获取文件件的大小,文件夹返回的也是0

                如果构造方法中给出的路径不存在,那么返回0

        */

        //这时我在上面的路径中创建了一个真正的a.txt

        System.out.println(f1.length()+"字节");

        System.out.println(f2.length()+"字节");//这个路径不存在

    }

    @Test

    public void test02(){

    /*

      判断方法:

      boolean exists():此File表示的文件或目录是否实际存在

      boolean isDirectory:此File表示的是否为目录

      boolean isFile:此File表示的是否为文件

    */

        //exists方法测试

        File f1=new File("D:\\program testing\\javatest\\JavaHHHLevel\\src");

        System.out.println(f1.exists());

        //相对路径

        File f2=new File("JavaHHHLevel.iml");

        System.out.println(f2.exists());

        //isDirectoryisFile测试,如果路径不存在都返回false

        System.out.println(f1.isDirectory());

        System.out.println(f2.isFile());

    }

    @Test

    public void test03() throws IOException {

    /*

    创建删除功能的方法(返回的都是boolean值):

    createNewFile():当且仅当具有该名称的文件尚不存在时,创建一个新的空文件

        true:文件不存在,创建文件,返回true

        false:文件存在,不会创建,返回false

        注意:

            1、此方法只能创建文件,不能创建文件夹

            2、创建文件的路径必须存在,否则会抛出异常

    delete():删除由此File表示的文件或目录

true:文件/文件夹删除成功返回true

false:文件夹中有内容,不会删除返回false。构造方法中路径不存在false

注意:delete方法直接在硬盘删除不走回收站

    mkdir():创建由此File表示的目录,只能创建单级文件夹

    mkdirs():创建由此File表示的目录,包括任何必须但不存在的父目录

        注意:创建文件夹的方法当路径不存在时不会抛出异常,只会返回false

    */

        //createNewFile方法测试

        File f1=new File("D:\\program testing\\javatest\\JavaHHHLevel\\src\\1.txt");

        System.out.println(f1.createNewFile());

        File f2=new File("src\\2.txt");

        System.out.println(f2.createNewFile());

        //创建了两个txt文件

        //delete方法测试

        System.out.println(f1.delete());

        System.out.println(f2.delete());

        //两个txt文件被删除了

        //mkdir方法测试

        File f3=new File("D:\\program testing\\javatest\\JavaHHHLevel\\src\\test_directory");

        System.out.println(f3.mkdir());

        //创建了一个名为test_directory的文件夹

        File f4=new File("D:\\program testing\\javatest\\JavaHHHLevel\\src\\more\\test_directory");

        System.out.println( f4.mkdirs());

        //创建了多重文件夹more\test_directory

    }

}

 

@Test

    public void test04(){

        /*

        遍历功能

        String[] list():返回一个String数据,表示File目录中所有子文件或目录

        File[] listFiles():返回一个File数组(封装成File对象),表示File目录中所有的子文件或目录

        注意:

        list方法和ListFiles方法遍历的是构造方法中给出的目录

        如果目录不存在,会出现空指针异常

        如果构造方法中的路径不是一个目录,也会出现空指针异常

        可以获取到隐藏的文件夹

        */

        File f1=new File("D:\\program testing\\javatest\\JavaHHHLevel\\src");

        String[] list = f1.list();

        for (String s : list) {

            System.out.println(s);

        }

        File[] files = f1.listFiles();

        for (File file : files) {

            System.out.println(file);

        }

    }

递归在FIle中的用法

直接递归:自己调用自己

间接递归:A调B,B调C,C再调用A

 

注意事项:

递归中要有一定限制,保证递归能够停下来,否则会栈内存溢出

递归次数不能过多,否则也会栈内存溢出

构造方法禁止递归

 

递归前提:当调用方法时,方法的主体不变,每次调用的参数不同,可以递归

溢出的原理

 

案例

/*递归打印多级目录*/

public class FileRecursion {

    public static void main(String[] args) {

        File file =new File("D:\\test_directory");

        getAllFile(file);

    }

    public static void getAllFile(File file){

        File[] files=file.listFiles();

        for (File file1 : files) {

            if (file1.isDirectory())

                getAllFile(file1);

            System.out.println(file1);

        }

    }

 

 

综合案例只打印java文件

 public static void getAllFile(File file){

        File[] files=file.listFiles();

        for (File file1 : files) {

            if (file1.isDirectory())

                getAllFile(file1);

            //这里可以使用getPathtoString等方法

            if (file1.getName().toLowerCase().endsWith("java"))

            System.out.println(file1);

        }

    }

 文件过滤器

在ListFiles的重载方法中:

ListFiles(FileFilter filter)

ListFiles(FilenameFilter filter)

传递的就是过滤器

 

java.io.FileFilter接口:用于抽象路径名的过滤器

作用:过滤文件(File)

抽象方法:用来过滤文件的方法

boolean accept(File pathname)测试指定抽象路径是否应该包含某个路径名列表中

参数:

File pathname:使用listFile方法遍历目录,得到的每一个文件对象

 

java.io.FilenameFilter接口:实现此接口的实现类可以用于过滤文件名

抽象方法:用来过滤文件的方法

boolean accept(File dir,String name):测试指定文件是否包含在某一文件列表中

参数:File dir:构造方法中传递的被遍历的目录

String name:使用ListFiles方法遍历目录,获取的每一个文件/文件夹的名称

注意:两个过滤器需要自己写实现类,在方法中自己定义过滤的规则

 

listFiles方法一共做了3件事

1、对构造方法中传递的目录进行遍历,获取目录中的每一个文件/文件夹-->封装为File对象

2、调用参数传递的过滤器方法accept

3、把遍历得到的每一个File对象,传递到accept方法的参数pathname

 

accept:返回true则将File对象保存到File数组中

false则不会保存

 

 

实例:

/*过滤器*/

public class Filter {

    //懒得外面再写一个类了,实现过滤器的内部类

    public static class FileFilterImpl implements FileFilter {

        @Override

        public boolean accept(File pathname) {

            if (pathname.isDirectory())return true;

            return pathname.getName().toLowerCase().endsWith(".java");

        }

    }

    public static void main(String[] args) {

        getAllFile(new File("D:\\test_directory"));

    }

    public static void getAllFile(File file){

        //lambda写法

        //FileFilter

       /* File[] files=file.listFiles((pathname)-> pathname.isDirectory()||pathname.getName().toLowerCase().endsWith(".java"));*/

        //FilenameFilter

        File[] files= file.listFiles((dir, name) -> new File(dir,name).isDirectory()||name.toLowerCase().endsWith(".java"));

        for (File file1 : files) {

            if (file1.isDirectory())

                getAllFile(file1);

                System.out.println(file1);

        }

    }

}

结果都一样:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值