A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 森111 中级黑马   /  2018-11-26 15:17  /  726 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

构造方法

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

public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的 File实例。

public File(File parent, String child) :从父抽象路径名和子路径名字符串创建新的 File实例。

一个File对象代表硬盘中实际存在的一个文件或者目录。

无论该路径下是否存在文件或者目录,都不影响File对象的创建。



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

public String getPath() :将此File转换为路径名字符串。(调用方法的对象录入的什么内容,此返回什么内容)

public String getName()  :返回由此File表示的文件或目录的名称。(最后一级目录名 或者文件名)  

public long length()  :返回由此File表示的文件的长度。 文件夹为 0 / 4096

绝对路径盘符开始的路径,这是一个完整的路径。 d:\\a\\c\\s.txt

相对路径:相对于项目目录的路径,这是一个便捷的路径,开发中经常使用。

及:(E:\idea\jiuye)


public class FilePath {

    public static void main(String[] args) {

              // D盘下的bbb.java文件

        File f = new File("D:\\bbb.java");

        System.out.println(f.getAbsolutePath());


                // 项目下的bbb.java文件

        File f2 = new File("bbb.java");

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

    }

}

输出结果:

D:\bbb.java

E:\idea\jiuye\bbb.java


判断功能的方法

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

public boolean isDirectory() :此File表示的是否为目录。(文件夹)

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


public static void main(String[] args) {

        // boolean exists(): 判断File对象代表的文件或目录是否实际存在

        File f1 = new File("day08");  // 传入存在的路径

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


        File f2 = new File("d:\\a.txt");  // 传入不存在的路径

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


        // boolean isDirectory(): 判断File表示的是否为目录

        File f3 = new File("day08");  // 存在的目录

        System.out.println(f3.isDirectory()); // true


        File f4 = new File("day08\\src\\com\\itheima\\test01\\Test.java");  // 存在的文件

        System.out.println(f4.isDirectory());  // false


        File f5 = new File("sdfdfdsaf");  // 不存在的目录

        System.out.println(f5.isDirectory());  // false


        // boolean isFile(): 判断File表示的是否为文件

        File f6 = new File("day08\\src\\com\\itheima\\test01\\Test.java");  // 存在的文件

        System.out.println(f6.isFile()); // true


        File f7 = new File("day08");  // 存在的目录

        System.out.println(f7.isFile());  // false


        File f8 = new File("sdfdfdsaf.txt");  // 不存在的文件

        System.out.println(f8.isFile());  // false

    }


创建删除功能的方法

public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。 创建成功返回 true

false: 路径已经存在(无论文件还是目录)   

抛IO异常: 写的路径不符合逻辑 (Y:\\a.txt\dsfsd)


public boolean delete() :删除由此File表示的文件或目录。  (删除最后一级文件或者文件夹)

delete方法,如果此File表示目录,则目录必须为空才能删除。

public boolean mkdir() :创建由此File表示的目录。(单级文件夹)

public boolean mkdirs() :创建由此File表示的目录(多级文件夹),包括任何必需但不存在的父目录。


public class Test {

    public static void main(String[] args) throws IOException {

        // 在当前的模块中, 创建a目录(注意用相对路径时加上模块名)

        File aDir = new File("day08\\a");

        boolean b1 = aDir.mkdir();

        System.out.println("在当前的模块中, 创建a目录:" + b1);


        // 在a目录中创建b目录

        File bDir = new File("day08\\a\\b");

        boolean b2 = bDir.mkdirs();

        System.out.println("在a目录中创建b目录:" + b2);


        // 在b目录中创建b.txt文件和c.txt文件

        File bFile = new File("day08\\a\\b\\b.txt");

        boolean b3 = bFile.createNewFile();

        System.out.println("在b目录中创建b.txt文件:" + b3);


        File cFile = new File("day08\\a\\b\\c.txt");

        boolean b4 = cFile.createNewFile();

        System.out.println("在b目录中创建c.txt文件:" + b4);


        // 删除c.txt文件

        boolean b5 = cFile.delete();

        System.out.println("删除c.txt文件:" + b5);

    }

}


目录的遍历

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

public File[ ] listFiles() :返回一个File数组,表示该File目录中的所有的子文件或目录。  

调用listFiles方法的File对象,表示的必须是实际存在的目录,否则返回null,无法进行遍历。


public class FileFor {

    public static void main(String[] args) {

        File dir = new File("d:\\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);

        }

    }

}


递归

  • 直接递归称为方法自身调用自己。
  • 间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法。
递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出。

在递归中虽然有限定条件,但是递归次数不能太多。否则也会发生栈内存溢出。

构造方法,禁止递归


递归求和

public static void main(String[] args) {

                //计算1~num的和,使用递归完成

                int num = 5;

              // 调用求和的方法

                int sum = getSum(num);

              // 输出结果

                System.out.println(sum);

        }

            //通过递归算法实现.

           //参数列表:int

            //返回值类型: int

        public static int getSum(int num) {

                 //num为1时,方法返回1,

                 //相当于是方法的出口,num总有是1的情况

                if(num == 1){

                        return 1;

                }

          //num不为1时,方法返回 num +(num-1)的累和

          //递归调用getSum方法

                return num + getSum(num-1);

        }


递归打印多级目录

多级目录的打印,就是当目录的嵌套。遍历之前,无从知道到底有多少级目录,所以我们还是要使用递归实现。

public static void main(String[] args) {

              // 创建File对象

        File dir  = new File("D:\\aaa");

              // 调用打印目录方法

        printDir(dir);

    }


    public static void  printDir(File dir) {

              // 获取子文件和目录

        File[] files = dir.listFiles();

              // 循环打印

              //判断:

              //当是文件时,打印绝对路径.

              //当是目录时,继续调用打印目录的方法,形成递归调用.

        for (File file : files) {

                    // 判断

            if (file.isFile()) {

                      // 是文件,输出文件绝对路径

                System.out.println("文件名:"+ file.getAbsolutePath());

            } else {

                      // 是目录,输出目录绝对路径

                System.out.println("目录:"+file.getAbsolutePath());

                      // 继续遍历,调用printDir,形成递归

                printDir(file);

            }

        }

    }


FileFilter文件过滤器的原理和使用

java.io.File类:  Filter过滤器

        File[] listFiles(FileFilter filter): 返回文件过滤器过滤后的File对象数组

        File[] listFiles(FilenameFilter filter): 返回文件过滤器过滤后的File对象数组


java.io.FileFilter接口: 用于File对象的过滤器

        boolean accept(File pathName): true则会将参数的File对象加入返回的File[], false则不加入


java.io.FilenameFilter接口: 将File对象拆分为父路径和子路径来判断的过滤器

        boolean accept(File dir, String name): true则会将参数的File对象加入返回的File[], false则不加入

                dir: 被找到的文件所在的目录 (父路径)

                name: 文件的名称          (子路径)


public class Test8 {

    public static void main(String[] args) {

        File f = new File("day08");

        method(f); //匿名内部类

method1(f);//lambda表达式

    }


private static void method1(File f) {

    File[] files = f.listFiles((p) -> p.isDirectory() || p.getName().toLowerCase().endsWith(".java"));

    for (File file : files) {

        if(file.isFile()){

            System.out.println(file);

        }else{

            method1(file);

        }

    }

}


private static void method(File f) {

        for (File file : f.listFiles(new FileFilter() {

            @Override

            public boolean accept(File pathname) {

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

            }

        })) {

            if(file.isFile()) {

                System.out.println(file);

            }else{

                method(file);

            }

        }

    }

}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马