文件File

File类

  • java.io.File用于表示文件(目录),也就是说程序员可以通过File类在程序中操作硬盘上的文件和目录。File类只用于表示文件(目录)的信息(名称、大小等),不能对文件的内容进行访问。

  • xx.java 运行之前会先编译成xx.class,然后运行这个字节码文件

  • 在IDEA中,编译后的字节码文件存放在同工程的out目录下

  • 在Eclipse中,编译后的字节码文件存放在同工程的bin目录下

  • 图片、文档、音乐等等文件素材,必须跟随字节码文件存在才有用

  • File:代表文件或目录

    ​ new File() 不代表 这个文件/目录 一定存在,仅代表Java中的一个对象

    . :当前目录

    … :上一级目录

构造方法

File(String pathname)

  • 通过将给定路径名字符串转换成抽象路径名来创建一个新的File实例。

— 抽象路径应尽量使用相对路径,并且目录的层级分隔符不要直接写“/”或“\”,应使用File.separator这个常量表示,以避免不同系统带来的差异。

public static void main(String[] args) {
        File file=new File("demo"+File.separator+"HelloWorld.txt");
        System.out.println(file);//demo\HelloWorld.txt
    }

File( parent, String child)

  • 根据parent抽象路径名和child路径名字符串创建一个新的File实例
File parent=new File("demo");
File file1=new File(parent,"HelloWorld.txt");        System.out.println(file1);//demo\HelloWorld.txt

常用API

separator()

  • 与系统相关的默认名称–分隔符字符,以方便的方式表示为字符串,该字符串包含一个字符——UNIX系统上'/'——Microsft Windows系统上是'\\'

  • 目录的层级分隔符不要直接写“/”或“\”,应使用File.separator这个常量表示,以避免不同系统带来的差异。

isFile()

  • 用于判断当前File对象所表示的是否是一个文件
  • 返回值:boolean类型

isDirectory()

  • 用于判断当前File对象所表示的是否是一个目录
  • 返回值:boolean类型

creatNewFile()

  • 用于当且仅当 不存在具有此抽象路径名指定的名称 的文件 时,创建由此抽象路径名指定的一个新的空文件
  • 返回值:boolean类型-------创建成功则返回true,若指定的文件已存在返回false

mkdir()

  • 用于创建此抽象路径名指定的目录
  • 返回值:boolean类型-------当且仅当已创建目录时-true,否false

mkdirs()

  • 用于创建此抽象路径名指定的目录,包括所有必须但不存在的父目录。
  • 注意:此操作失败时也可能已经成功地创建了一部分必须的父目录
  • 返回值:boolean类型----当且仅当已创建目录以及所有必须的父目录时,true,否则false

length()

  • 返回此抽象路径名表示的文件的长度(占用的字节量)
  • 返回值:long类型

exists()

  • 用于测试此抽象路径名表示的文件或目录是否存在
  • 返回值:boolean类型

delete()

  • 用于删除此抽象路径名表示的文件或目录
  • 返回值:boolean类型 ------成功删除文件/目录-true—否false
  • 注意:若File对象所表示的是一个目录时,在删除时需要保证此为空目录才可以成功删除

getName()

  • 返回由此抽象路径名表示的文件或目录的名称。 这只是路径名称序列中的最后一个名字。 如果路径名的名称序列为空,则返回空字符串。
  • 返回值:String类型

getParent()

  • 返回此抽象路径名的父null的路径名字符串,如果此路径名未命名为父目录,则返回null。
  • 返回值:String类型

getParentFile()

  • 返回此抽象路径名的父null抽象路径名,如果此路径名未命名为父目录,则返回null。
  • 返回值:File类型

getPath()

  • 将此抽象路径名转换为路径名字符串。

isAbsolute()

  • 测试这个抽象路径名是否是绝对的。
  • 返回值:boolean类型
  • 绝对路径名的定义是依赖于系统的。 在UNIX系统上,如果前缀为"/" ,则路径名是绝对的。 在Microsoft Windows系统上,路径名是绝对的,如果其前缀是驱动器说明符,后跟"\\" ,或者前缀为"\\\\"

lastModified()

  • 返回此抽象路径名表示的文件上次修改的时间。
  • 返回值:long类型

list()

  • 返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录
  • 返回值:String[]
  • 如果此抽象路径名不表示目录,则此方法返回null 。 否则返回一个字符串数组,一个用于目录中的每个文件或目录。 表示目录本身和目录的父目录的名称不包括在结果中。 每个字符串都是一个文件名,而不是完整的路径。

listFiles()

  • 用于返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的子项(文件或目录)
  • 返回值:抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件和目录。
  • 如果目录为空,那么数组也将为空。如果抽象路径名不表示一个目录,或者发生I/O错误,则返回null。
public static void main(String[] args) {
        //list---返回的是字符串
        //listFiles---返回的是File对象
        //如果File是目录,可以将File目录中的所有文件/目录 都列出来
        //. 当前目录  JavaSE

        File file=new File(".");
        File[]listFile=file.listFiles();
        for(File f:listFile){
            System.out.println(f);
            /**
             .\.idea
             .\a.txt
             .\out
             .\src
             .\string.iml
             .\text*/
        }

        System.out.println("---------分割线————————————");

        /** String ss[] = list();
         if (ss == null) return null;
         ArrayList<File> files = new ArrayList<>();
         for (String s : ss)
         if ((filter == null) || filter.accept(this, s))//---->返回的是true,就执行一下程序,既保留
         files.add(new File(s, this));
         return files.toArray(new File[files.size()]);
         *
         */
        //匿名内部类,相当于实现了FileFilter接口
        File[]fs=file.listFiles(new FileFilter() {
            //filter.accept(f)=true  才要保留f对象
            @Override
            /**
             * 返回true,保留f对象
             * 返回false,过滤掉f对象
             * 保留所有的目录,过滤掉文件,返回f.isDirectory()
             * 只保留大小在1000b以上的,返回f.length()>1000
             * 只保留java文件,返回f.getName.endWith(".java")
             */
            public boolean accept(File f) {
                return f.getName().endsWith(".java");
                //false 是空

                //true时
                /**
                 * .\.idea
                 * .\a.txt
                 * .\out
                 * .\src
                 * .\string.iml
                 * .\text
                 */

                //f.isDirectory()
                /**
                 * .\.idea
                 * .\out
                 * .\src
                 * .\text
                 */

                //f.length()>1000  空
                
                //f.getName.endWith(".java")  空
            }
        });
        for(File f:fs){
            System.out.println(f);
        }
    }
}

创建File对象

  public static void main(String[] args) throws IOException {
        //  绝对路径——从盘符开始的完整路径
        //相对路径——需要一个参考值,所以不固定[不够准确,但是也常用]
        //最常用的是通过相对路径获得绝对路径
        //a.text存不存在,不影响file对象的创建
        File file=new File("a.txt");

        //获得文件的绝对路径
        String path=file.getAbsolutePath();
        System.out.println(path);//F:\java练习程序\string\a.txt

        //可以询问文件是否存在
        System.out.println(file.exists());//false----true

        //如果存在,删除该目录
        //file.delete();

        //创建一个文件-a.text-----执行这一步之后,文件存在--true
        //[前提,文件不存在时才会创建]
        //如果有一个文件也叫a.txt,那它是目录——不能创建同名的文件
        //如果 File file=new File("a","a.txt");--a是父路径,a.txt是子路径—不能创建文件
        //file.createNewFile();

        //如果不存在,可以创建目录
        //file.mkdir();

        //询问file对象是不是普通文件--/目录
        System.out.println(file.isFile());//true
        System.out.println(file.isDirectory());//false

        //查看文件的大小
        System.out.println(file.length());//0

        //查看文件最后的修改时间--long类型的值
        System.out.println(file.lastModified());//1615986242616

        //获得file对象的名字
        System.out.println(file.getName());//a.txt
    }
}

File file=new File("text");
        file.delete();
        //当我创建text目录后,里面又创建了子目录,子目录里创建文件···
        //结果:目录没有删除
        //说明:只能删除普通文件/空目录。

FileFilter接口

  • FileFilter用于抽象路径名的过滤器

  • 此接口的实例可传给File类的listFiles(FileFilter)方法。用于返回满足该过滤器要求的子项。

— File[] listFiles(FileFilter filter)

  • 代码块看listFiles上的

递归删除文件

  • 递归:自己调用自己的方法
  • 递归的核心问题:避免死循环,有一个结束的开关/标志
/**
 * 要求用户输入一个文件或目录名,并删除当前目录下的该文件或目录。
 * 可自行手动先在当前项目目录中创建一个要删除的文件或目录,若是目录,还可以
 * 在该目录中继续创建若干级目录和文件。
 */
public class Test04 {

    public static void deleteFile(File file){
        //是目录,删除当前目录下的该文件或目录
        if(file.isDirectory()){
            File[]listFile=file.listFiles();
            for(File f:listFile){
                deleteFile(f);//递归删除
            }
        }
        file.delete();
    }


    public static void main(String[] args){
        Scanner scan=new Scanner(System.in);
        System.out.println("请输入一个文件或目录名:");
        String str=scan.nextLine();
        File file=new File(str);
        //文件或目录不存在时
        if(!file.exists()){
            //自行手动 先在当前项目目录中 创建一个要删除的目录
            file=new File(".");
            //继续创建若干级目录和文件
            File[]listFile=file.listFiles();
            for(File f:listFile){
                //删除目录下的文件和目录
                deleteFile(f);
            }
            file.delete();
        }else{
            deleteFile(file);
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值