1.File类的使用详解

目录

File类的使用详解

1.什么是File类,能实现哪些功能?

2.File类静态成员变量_分隔符

3.File三种构造创建File对象

3.1.File(String pathname)

3.2. File(String parent,String child)

3.3.File(File parent,String child)

4.File中关于获取的方法

5.File中关于创建/删除的方法

6.File中关于判断功能

7.renameTo文件重命名到(算是命名+复制功效)

8.文件遍历_指定文件搜索

9.文件过滤器FileFilter_完成指定文件搜索

10.相对路径/绝对路径

File类的使用详解

1.什么是File类,能实现哪些功能?

File

  • java.io.File类:文件和目录路径名的抽象表示形式。
  • java把电脑中的文件和文件夹(目录)封装为了一个File类,可以使用File类对文件(夹)操作
  • File类是一个与系统无关的类,任何的操作系统都可以使用这个类中的方法

功能

  • 1.创建一个文件/文件夹
  • 2.删除文件/文件夹
  • 3.获取文件/文件夹
  • 4.判断文件/文件夹是否存在
  • 5.对文件夹进行遍历
  • 6.获取文件的大小

注意
 *      
file:文件
 *      directory:文件夹/目录
 *      path:路径

2.File类静态成员变量_分隔符

  • File类的静态成员变量 :路径分隔符、文件分隔符
  static String pathSeparator:与系统有关的路径分隔符,为方便,它被表示为字符串
  static char pathSeparatorChar:与系统有关的路径分隔符

  static String separator:与系统有关的默认分隔符,为方便,它被表示为一个字符串
  static char separatorChar:与系统有关的默认分隔符
  • 操作路径时:路径不能写死了,因为系统不同,路径、文件分隔符也不同。
 C:\develop\a\a.txt  windows系统下文件名称分隔符为反斜杠\
 C:/develop/a/a.txt  Linux系统下文件名称分隔符为正斜杠/
  • 上面路径通过File类静态成员变量_分隔符写法如下:
"C:"+File.separator+"develop"+File.separator+"a"+File.separator+"a.txt"
  • Demo
import java.io.File;
public class Demo01File {
    public static void main(String[] args) {
      
        String ps= File.pathSeparator;
        System.out.println(ps);//输出路径分隔符与系统有关,windows为分号,linux为冒号

        String s=File.separator;
        System.out.println(s);//文件分隔符,windows下为反斜杠\,Linux下为正斜杠/
    }
}

     

3.File三种构造创建File对象

  • 学习类,首先要学习该类中的静态成员,因为可以通过类名调用,然后学习构造方法,这样就可以创建对象,进而学习成员方法,对象调用之。

3.1.File(String pathname)

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

参数:

  • String pathname:字符串形式的路径名称
  • 路径可以以文件结尾,也可以以文件夹结尾
  • 路径可以是相对路径,也可以是绝对路径
  • 路径可以是存在的,也可以是不存在的
  • 创建File对象,只是把字符串路径封装为File对象,不考虑路径真假情况

Demo

package demo22IO;

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

public class Demo1 {
    public static void main(String[] args) throws IOException {
        File file = new File("E://1.txt");//创建File对象(将路径封装)
        boolean flag = file.createNewFile(); //对象调用createNewFile创建文件
        System.out.println(flag?"1.txt文件创建成功":"1.txt文件创建失败");
        System.out.println("文件路径为:"+file);

        File dir = new File("E://File1");//创建File对象
        boolean flag1 = dir.mkdir();//对象调用mkdir创建文件夹
        System.out.println(flag1?"File1文件夹创建成功":"File1文件夹创建失败");
        System.out.println("文件路径为:"+file);
    }
}

3.2. File(String parent,String child)

3.3.File(File parent,String child)

 File(String parent,String child)构造方法: 根据parent路径名和child路径名创建一个新File对象
 File(File parent,String child)

参数:把路径分成两个部分

  • String parent:父路径
  • String child:子路径

好处: 父路径和子路径,可以单独书写,使用起来非常灵活;父子路径都可以变化

package demo22IO;

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

/**
 * File构造方法二、三
 * File(String parent,String child)构造: 根据parent路径名和child路径名创建一个新File对象
 * File(File parent,String child)
 * 即在parent路径下创建文件(夹)child
 */
public class Demo2 {
    public static void main(String[] args) throws IOException {
        File file = new File("E://");//封装路径
        //在E盘下创建文件夹haha
        File file1 = new File(file, "haha");//封装路径
        boolean flag = file1.mkdir(); //根据路径创建文件夹
        System.out.println(flag?"创建成功":"创建失败");
        System.out.println("haha文件路径是:"+file1);

        //在E盘下创建文件haha.txt
        File file2 = new File("E://", "haha.txt");
        boolean flag2 = file2.createNewFile();
        System.out.println(flag2?"创建成功":"创建失败");
        System.out.println("haha.txt文件路径是:"+file2);
    }
}

4.File中关于获取的方法

 File类的关于获取功能的方法:
    -public String getAbsolutePath():获取此File的绝对路径名字符串
    -public String getPath():将此File转化为字符串路径即参数传递的路径是什么样就获取什么样
    -public String getName():获取由此File表示的文件或目录的名称(即文件/文件夹名称)
    -public long Length():获取由此File表示的文件长度(大小,字节为单位),不能获取文件夹大小
  • 文件夹是没有大小概念的,不能获取文件夹的大小,只能获取文件大小
  • 如果构造方法中给出的路径不存在,那么length方法返回0
package demo22IO;

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

public class Demo3 {
    public static void main(String[] args) throws IOException {
        File f1 = new File("E://hello");//封装路径并未创建该文件夹
        System.out.println(f1.getAbsolutePath());//获取f1绝对路径E:\hello

        File f2 = new File("hello.txt");//参数使用相对路径
        //获取f2绝对路径F:\新职课\代码\xinzhike\hello.txt
        System.out.println(f2.getAbsolutePath());
        System.out.println(f2.getPath());//hello.txt

        File f3 = new File("E://hehe");
        File f4 = new File("E://hehe.txt");
        System.out.println("文件夹名称是:"+f3.getName());//hehe
        System.out.println("文件名称是:"+f4.getName());//hehe.txt

        File f5 = new File("E://haha.txt");//封装路径
        long len = f5.length();
        System.out.println("haha.txt文件大小:"+len);//路径不存在大小0
    }
}

5.File中关于创建/删除的方法

  File类创建删除功能的方法:
    -public boolean createNewFile():创建一个新文件(文件名称要唯一)
    -public boolean delete():删除由此File表示的文件或目录(文件夹)
    -public boolean mkdir():创建由此File表示的目录(文件夹)
    -public boolean mkdirs():创建由此File表示的目录(多级同时创建),
使用相对路径,在"File类与IO流"项目直接下级创建多级文件夹222//333//444
    File f2 = new File("File类与IO流//222//333//444");
    boolean m2 = f2.mkdirs();

文件删除
    f2.delete();

6.File中关于判断功能

 File类中判断功能的方法:
   -public boolean exists():判断此File(对象)表示的文件或目录是否实际存在
   -public boolean isDirectory():判断此File表示的是否为目录(即文件夹)
   -public boolean isFile():判断此File表示的是否为文件
package demo22IO;
import java.io.File;
import java.io.IOException;
public class Demo3a {
    public static void main(String[] args) throws IOException {
        File f1 = new File("E://nihao");//封装路径,不存在的路径
        File f2 = new File("E://nihao.txt");
        System.out.println("f1表示的文件夹是否存在:"+f1.exists());
        System.out.println("f2表示的文件夹是否存在:"+f2.exists());
        System.out.println("======================");
        boolean flag = f1.mkdir();//创建文件夹nihao
        boolean flag1 = f2.createNewFile();//创建文件nihao.txt
        System.out.println("f1表示的文件夹是否存在:"+f1.exists());
        System.out.println("f2表示的文件夹是否存在:"+f2.exists());
        System.out.println("f1是否表示文件夹:"+f1.isDirectory());
        System.out.println("f2是否表示文件:"+f2.isFile());
    }
}

7.renameTo文件重命名到(算是命名+复制功效)

  • file1.renameTo(file2):将file1文件以file2名字命名并移动到file2路径中。

8.文件遍历_指定文件搜索

 File类遍历目录的方法

-public String[] list()
  • 返回一个String类型数组,表示该File目录中那一层的所有的子文件和子文件夹
  • 以字符串形式存储到String数组中,取出时是各个文件/文件夹的名称(非路径)
-public File[] listFiles():
  •  返回一个File类型数组,表示该File目录下子文件或文件夹(目录)
  • 被封装为一个个File对象存储到File类型的数组中。
  •  从File数组中遍历输出的是被封装在File对象中的各个文件路径

指定文件搜索步骤:

  •  1.使用递归进行多级遍历,当遍历到文件时,判断是否是.ppt后缀
  • 2.将File类型的路径(即File对象)转换为字符串形式有三种方式:
    • Strin name=f.getName():--获取路径f的末尾文件abc.ppt
    • String path=f.getPath();--(原样)获取路径f即c:\\abc\\abc.ppt
    • String s=f.toString();--同上,因为重写的toString方法中就是getPath()
  • 3.判断后缀为.ppt文件方法:
    • 调用String类中方法endsWith判断字符串结尾是否是.ppt
    • boolean b=s.endsWith(".ppt");
package demo22IO;
import java.io.File;
/**
 * 文件遍历
 */
public class Demo3aaa {
    public static void main(String[] args) {
        File f = new File("F:\\班级表格");//封装路径
        File[] files = f.listFiles();//获取该路径下所有文件/文件夹存入数组
        listFiles(files);
    }

    /**
     * 定义一个遍历文件的方法
     * @param files
     */
    private static void listFiles(File[] files) {
        if(files!=null&&files.length>0){ //首先文件数组存在且要有文件/夹
            for (File f:files) {  //遍历判断是文件还是文件夹
                if (f.isFile()){  //是文件
                    if (f.getName().endsWith(".ppt")){//若文件后缀java且<10M则打印路径
                        if (f.length()<10*1024*1024){ //1B-1KB-1MB
                            System.out.println("找到一个.ppt文件:"+f.getAbsolutePath());
                        }
                    }
                }else {//是文件夹
                    File[] files1 = f.listFiles();//再获取该文件夹下所有文件/文件夹
                    listFiles(files1);//递归
                }
            }
        }
    }
}

9.文件过滤器FileFilter_完成指定文件搜索

FileFilter过滤器原理

  • 1.listFiles方法会对构造方法中传递的目录进行遍历,遍历的文件/文件夹封装为File对象
  • 2.listFiles方法调用参数传递的过滤器中的accept方法
  • 3.listFiles方法会把遍历得到的每一个File对象,传递给accept方法的参数pathname
  • 4.accept方法中设置过滤规则,判断传过来的File对象是否以.ppt结尾,返回布尔值
    • true:就会把传递过去的File对象保存到File数组中
    •  false:就不会把传递过去的File对象保存到File数组中
package demo22IO;
import java.io.File;
import java.io.FileFilter;
//文件过滤器接口
public class PDFFileFilter implements FileFilter {
    @Override
    public boolean accept(File pathname) {//定义过滤规则
        //若文件后缀.pdf或者是文件夹则返回true表示保留在文件数组中
        if (pathname.getName().endsWith(".ppt")||pathname.isDirectory()){
            return true;
        }
        return false;
    }
}

package demo22IO;
import java.io.File;
/**
 * 搜索指定文件_使用文件过滤器FileFilter
 * 1.需要实现过滤器接口,并重写方法定义过滤规则
 */
public class Demo3b {
    public static void main(String[] args) {
        File f = new File("F:\\班级表格");//封装路径
        getFiles(f);
    }

    private static void getFiles(File file) { //过滤文件方法
        //1.创建一个过滤器并描述规则
        PDFFileFilter filter = new PDFFileFilter();
        //2.通过文件file获取过滤后的子文件/夹,并判空
        File[] files = file.listFiles(filter);
        if (files != null && files.length > 0) {
            //3.遍历文件数组
            for (File f : files) {
                if (f.isDirectory()) { //如果是文件夹,则递归继续处理这个文件夹
                    getFiles(f);
                } else { //是文件,过滤后保留在数组的文件一定pdf
                    System.out.println("发现一个ppt:" + f.getAbsolutePath());
                }
            }
        }
    }
}

使用匿名内部类简化过滤器接口实现

package demo22IO;
import java.io.File;
import java.io.FileFilter;

/**
 * 匿名内部类简化过滤器接口实现
 * 将实现过滤器接口的PDFFieFilter类删除
 */
public class Demo3bb {
    public static void main(String[] args) {
        File f = new File("F:\\班级表格");//封装路径
        getFiles(f);
        getFiles1(f);
    }

    /**
     * 使用匿名内部类简化接口实现
     * @param file
     */
    private static void getFiles(File file) { //过滤文件方法
        //1.创建一个过滤器并描述规则
        FileFilter filter = new FileFilter(){
            @Override
            public boolean accept(File pathname) {
                if (pathname.getName().endsWith(".ppt")||pathname.isDirectory()){
                    return true;
                }
                return false;
            }
        };
        //2.通过文件file获取过滤后的子文件/夹存入数组,并判空
        File[] files = file.listFiles(filter);
        if (files != null && files.length > 0) {
            //3.遍历文件数组
            for (File f : files) {
                if (f.isDirectory()) { //如果是文件夹,则递归继续处理这个文件夹
                    getFiles(f);
                } else { //是文件,过滤后保留在数组的文件一定pdf
                    System.out.println("发现一个ppt:" + f.getAbsolutePath());
                }
            }
        }
    }

    /**
     * 2.将匿名内部类直接放在使用的地方,开发中常用
     * @param file
     */
    private static void getFiles1(File file) { //过滤文件方法
        //通过文件file获取过滤后的子文件/夹存入数组,并判空。
        //listFiles()遍历,参数传递文件过滤器接口的实现
        File[] files = file.listFiles(new FileFilter(){
            @Override
            public boolean accept(File pathname) {
                if (pathname.getName().endsWith(".ppt") || pathname.isDirectory()) {
                    return true;
                }
                return false;
            }
        });
        if (files != null && files.length > 0) {
            //3.遍历文件数组
            for (File f : files) {
                if (f.isDirectory()) { //如果是文件夹,则递归继续处理这个文件夹
                    getFiles(f);
                } else { //是文件,过滤后保留在数组的文件一定pdf
                    System.out.println("发现一个ppt:" + f.getAbsolutePath());
                }
            }
        }
    }

    /**
     *3.Lambda表达式进一步简化
     * @param file
     */
    private static void getFiles2(File file) { //过滤文件方法
        //通过文件file获取过滤后的子文件/夹存入数组,并判空。
        //listFiles()遍历,参数传递文件过滤器接口的实现
        File[] files = file.listFiles((pathname)->{
            if (pathname.getName().endsWith(".ppt") || pathname.isDirectory()) {
                return true;
            }
            return false;
        });
        if (files != null && files.length > 0) {
            //3.遍历文件数组
            for (File f : files) {
                if (f.isDirectory()) { //如果是文件夹,则递归继续处理这个文件夹
                    getFiles(f);
                } else { //是文件,过滤后保留在数组的文件一定pdf
                    System.out.println("发现一个ppt:" + f.getAbsolutePath());
                }
            }
        }
    }
}

10.相对路径/绝对路径

package demo22IO;

import java.io.File;

public class Demo5 {
    public static void main(String[] args) {
        //相对路径:以盘符开始   例如c://a.txt
        //绝对路径:java中是相对于项目目录路径    例如  a.txt
        File file1 = new File("c://a.txt");
        File file2 = new File("a.txt");
        System.out.println("File1的路径"+file1.getAbsolutePath());
        System.out.println("File2的路径"+file2.getAbsolutePath());
    }
}

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值