File

File类

1.0 概述

java.io.File 文件和目录路径名的抽象表示形式,java把电脑中的文件和文件夹(目录)封装为了一个File类,我们可以使用File类对文件和文件夹进行操作。

 

1.1 字段

  • static String pathSeparator 与系统有关的路径分隔符,为了方便,它被表示为一个字符串。
  • static String separator 与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。
    public static void main(String[] args) {
        String pathSeparator = File.pathSeparator;
        System.out.println(pathSeparator);//路径分隔符 windows:分号;  linux:冒号:

        String separator = File.separator;
        System.out.println(separator);  // 文件名称分隔符 windows:反斜杠\  linux:正斜杠/

        String path = "dd"+File.separator +"d.java";
        System.out.println(path);  // dd\d.java
    }

 

1.2 构造方法

  • public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
  • public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的 File实例。
  • public File(File parent, String child) :从父抽象路径名和子路径名字符串创建新的 File实例。
  • 构造举例,代码如下:
    public static void main(String[] args) {
        // 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例
        File file = new File("D:\\cc\\a.txt");

        // 从父路径名字符串和子路径名字符串创建新的 File实例。
        String parent_path = "D:\\cc";
        File file1 = new File(parent_path, "b.txt");

        // 从父抽象路径名和子路径名字符串创建新的 File实例。
        File parent_dir = new File("D:\\cc");
        String child = "c.txt";
        new File(parent_dir,child);

    }

小贴士:

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

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

1.3 常用方法

获取功能的方法

  • public String getAbsolutePath() :返回此File的绝对路径名字符串。
  • public String getPath() :将此File转换为路径名字符串。
  • public String getName() :返回由此File表示的文件或目录的名称。
  • public long length() :返回由此File表示的文件的长度。
  • public String getParent() :返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null

     

  • 方法演示代码

public static void main(String[] args) {
        // 创建一个文件对象
        File f = new File("D://aa/bbb.java");

        System.out.println("文件的绝对路径:"+f.getAbsolutePath());  // 文件的绝对路径:D:\aa\bbb.java
        System.out.println("文件构造路径:"+f.getPath()); // 文件构造路径:D:\aa\bbb.java
        System.out.println("文件名称:"+f.getName());  // 文件名称:bbb.java
        System.out.println("文件大小:"+f.length()+"字节"); // 文件大小:0字节
        System.out.println("文件的父路径:"+f.getParent());  //文件的父路径:D:\aa

        File f2 = new File("D://aa/bb/cc");
        System.out.println("目录的绝对路径:"+f2.getAbsolutePath());  //目录的绝对路径:D:\aa\bb\cc
        System.out.println("目录构造路径:"+f2.getPath()); //目录构造路径:D:\aa\bb\cc
        System.out.println("目录名称:"+f2.getName());  //目录名称:cc
        System.out.println("目录大小:"+f2.length()+"字节"); //目录大小:0字节
        System.out.println("目录的父路径:"+f2.getParent()); // 目录的父路径:D:\aa\bb

    }

绝对路径和相对路径

  • 绝对路径:从盘符开始的路径,这是一个完整的路径。
  • 相对路径:相对于项目目录的路径,这是一个便捷的路径,开发中经常使用。

判断功能的方法

  • public boolean exists() :此File表示的文件或目录是否实际存在。
  • public boolean isDirectory() :此File表示的是否为目录。
  • public boolean isFile() :此File表示的是否为文件。
    public static void main(String[] args) {
        // 创建文件对象
        File f = new File("D:\\aa\\bbb.java");
        File f2 = new File("D:\\aa\\cc");
        
        // 判断是否存在
        System.out.println("D://aa/bbb.java 是否存在:"+f.exists());  // D://aa/bbb.java 是否存在:true
        System.out.println("D://aa/cc 是否存在:"+f2.exists());   // D://aa/bbb.java 是否存在:true

        // 判断是文件还是目录 (必须存在)
        System.out.println("D://aa/bbb.java 是文件:"+f.isFile()); //D://aa/bbb.java 是文件:true
        System.out.println("D://aa/cc 是目录:"+f2.isDirectory()); // D://aa/cc 是目录:true
    }

创建删除功能的方法

  • public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
  • public boolean delete() :删除由此File表示的文件或目录。
  • public boolean mkdir() :创建由此File表示的目录。
  • public boolean mkdirs() :创建由此File表示的目录,包括任何必需但不存在的父目录。
  • public boolean renameTo(File dist):  重新命名此抽象路径名表示的文件。

     

package com.long123.File;

import java.io.File;
import java.io.IOException;

public class FileDemo4 {
    public static void main(String[] args) throws IOException {
       // 文件的创建
        File f = new File("aa.txt");
        if(!f.exists()){
            System.out.println("文件是否创建:"+f.createNewFile()); // 文件是否创建:true
        }

        // 目录创建
        File f2 = new File("newDir");
        if (!f2.exists()){  // 如果目录不存在
            System.out.println("目录是否创建:"+f2.mkdir()); //目录是否创建:true
        }

        // 创建多级目录
        File f3 = new File("newDir\\a\\b");
        System.out.println("是否创建成功:"+f3.mkdirs());  //是否创建成功:true
        // b不会被当作目录创建

        // 文件的删除
        System.out.println(f.delete()); // true

        // 目录的删除
        System.out.println(f3.delete());  // false
    }
}

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

1.4 目录遍历

  • public String[] list() :返回一个String数组,表示该File目录中的所有子文件或目录。
  • public File[] listFiles() :返回一个File数组,表示该File目录中的所有的子文件或目录。
public static void main(String[] args) throws IOException {
       File f = new File("D:\\aa");


       // 获取当前目录下的文件及文件夹的名称
        String[] names = f.list();
        if (names != null){
            for (String name : names){
                System.out.println(name);
            }
        }


        //获取当前目录下的文件以及文件夹对象,只要拿到了文件对象,那么就可以获取更多信息
        File[] files = f.listFiles();
        for (File file:files) {
            System.out.println(file);
        }
    }

小贴士:

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

递归打印多级目录

package com.long123.File;

import java.io.File;
import java.io.IOException;

public class FileDemo6 {
    public static void main(String[] args) throws IOException {
        File file = new File("D://aa");
        printDir(file);
    }

    public static void printDir(File dir){
        // 获取子文件和目录
        File[] files = dir.listFiles();

        /*
        如果是目录:继续调用printDir()
        如果是文件:打印文件的绝对路径
        * */
        for (File file:files) {
            if(file.isFile()){
                // 是文件,打印绝对路径
                System.out.println(file.getAbsolutePath());
            }else {
                // 是目录 ,打印绝对路径,继续往下查找
                System.out.println(file.getAbsolutePath());
                printDir(file);
            }
        }
    }
}

File过滤器

  • public File[]  listFiles(FileFilter filte)

  • public File[]  listFiles(FilenameFilter filter)

    java.io.FileFilter接口:用于抽象路径名(File对象)的过滤器。
        作用:用来过滤文件(File对象)
        抽象方法:用来过滤文件的方法
            boolean accept(File pathname) 测试指定抽象路径名是否应该包含在某个路径名列表中。
            参数:
                File pathname:使用ListFiles方法遍历目录,得到的每一个文件对象
 
    java.io.FilenameFilter接口:实现此接口的类实例可用于过滤器文件名。
        作用:用于过滤文件名称
        抽象方法:用来过滤文件的方法
            boolean accept(File dir, String name) 测试指定文件是否应该包含在某一文件列表中。
            参数:
                File dir:构造方法中传递的被遍历的目录
                String name:使用ListFiles方法遍历目录,获取的每一个文件/文件夹的名称

 注意:
        两个过滤器接口是没有实现类的,需要我们自己写实现类,重写过滤的方法accept,在方法中自己定义过滤的规则

过滤以.java结尾的文件

// FilterImpl  实现FilteFile接口

import java.io.File;
import java.io.FileFilter;

public class FilterImpl implements FileFilter {
    @Override
    public boolean accept(File pathname) {
        // 如果是个目录 继续找
        if (pathname.isDirectory())
            return true;
        // 判断是否有.java
        return  pathname.getName().toLowerCase().endsWith(".java");
    }
}
package com.long123.File;

import java.io.File;
import java.io.IOException;

public class FileDemo7 {
    public static void main(String[] args) throws IOException {
        File file = new File("D://aa");
        printDir(file);
    }

    public static void printDir(File dir){
        // 获取子文件和目录 // 过滤器
        File[] files = dir.listFiles(new FilterImpl());

        /*
        如果是目录:继续调用printDir()
        如果是文件:打印文件的绝对路径
        * */
        for (File file:files) {
            if(file.isFile()){
                // 是文件,打印绝对路径
                System.out.println(file.getAbsolutePath());
            }else {
                // 是目录 ,打印绝对路径,继续往下查找
                // System.out.println(file.getAbsolutePath());
                printDir(file);
            }
        }
    }
}

内部类实现

package com.long123.File;

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;

public class FileDemo8 {
    public static void main(String[] args) throws IOException {
        File file = new File("D://aa");
        printDir(file);
    }

    public static void printDir(File dir){
        // 获取子文件和目录 // 过滤器 内部类
        File[] files = dir.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                // 如果是个目录 继续找
                if (pathname.isDirectory())
                    return true;
                // 判断是否有.java
                return  pathname.getName().toLowerCase().endsWith(".java");
            }
        });

        /*
        如果是目录:继续调用printDir()
        如果是文件:打印文件的绝对路径
        * */
        for (File file:files) {
            if(file.isFile()){
                // 是文件,打印绝对路径
                System.out.println(file.getAbsolutePath());
            }else {
                // 是目录 ,打印绝对路径,继续往下查找
                // System.out.println(file.getAbsolutePath());
                printDir(file);
            }
        }
    }
}

lambda 实现

package com.long123.File;

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;

public class FileDemo9 {
    public static void main(String[] args) throws IOException {
        File file = new File("D://aa");
        printDir(file);
    }

    public static void printDir(File dir){
        // 获取子文件和目录 // 过滤器 内部类
        File[] files = dir.listFiles(pathname->
         pathname.getName().endsWith(".java") || pathname.isDirectory()
        );

        /*
        如果是目录:继续调用printDir()
        如果是文件:打印文件的绝对路径
        * */
        for (File file:files) {
            if(file.isFile()){
                // 是文件,打印绝对路径
                System.out.println(file.getAbsolutePath());
            }else {
                // 是目录 ,打印绝对路径,继续往下查找
                // System.out.println(file.getAbsolutePath());
                printDir(file);
            }
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值