Java里的文件类

1.概述

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

2.构造方法

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

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

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

  • 构造举例,代码如下:

package File;

import java.io.File;

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

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

public File(File parent, String child) :从父抽象路径名和子路径名字符串创建新的 File实例。
 */
public class demo1 {
    public static void main(String[] args) {
        String str="C:\\Users\\ch200\\OneDrive\\桌面\\1.txt";
        //1.根据字符串表示的路径,变成File对象
        File f1= new File(str);
        System.out.println(f1);
        //2.父级路径:C:\Users\ch200\OneDrive\桌面
        //子级路径:1.txt
        String parent = "C:\\Users\\ch200\\OneDrive\\桌面";
        String child = "1.txt";
        File f2 = new File(parent,child);
        System.out.println(f2);//C:\Users\ch200\OneDrive\桌面\1.txt
        File f3= new File(parent+"\\"+child);
        System.out.println(f3);
       // 通过父级File对象和子路径字符串
        File f4=new File("C:\\Users\\ch200\\OneDrive\\桌面");
        String s="1.txt";
        File f5=new File(f4,s);
        System.out.println(f5);

    }
}

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

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

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

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

package File;

import java.io.File;
import java.sql.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;

/*
        public long length()                返回文件的大小(字节数量)
        public String getAbsolutePath()     返回文件的绝对路径
        public String getPath()             返回定义文件时使用的路径
        public String getName()             返回文件的名称,带后缀
        public long lastModified()          返回文件的最后修改时间(时间毫秒值)
     */
public class demo3 {
    public static void main(String[] args) {
        //1.length  返回文件的大小(字节数量)
        //细节1:这个方法只能获取文件的大小,单位是字节
        //如果单位我们要是M,G,可以不断的除以1024
        //细节2:这个方法无法获取文件夹的大小
        //如果我们要获取一个文件夹的大小,需要把这个文件夹里面所有的文件大小都累加在一起。
        File f1=new File("D:\\Java学习\\a.txt");
        System.out.println(f1.length());//9字节
        File f2=new File("D:\\Java学习\\bbb");
        System.out.println(f2.length());
        System.out.println("--------------------");


        //2.getAbsolutePath 返回文件的绝对路径
        File f3 = new File("D:\\Java学习\\a.txt");
        String path1 = f3.getAbsolutePath();
        System.out.println(path1);

        File f4 = new File("day45\\a.txt");
        String path2 = f4.getAbsolutePath();
        System.out.println(path2);

        System.out.println("====================================");

        //3.getPath 返回定义文件时使用的路径
        File f5 = new File("D:\\Java学习\\a.txt");
        String path3 = f5.getPath();
        System.out.println(path3);

        File f6 = new File("day45\\a.txt");
        String path4 = f6.getPath();
        System.out.println(path4);
        System.out.println("====================================");

        //4.getName 获取名字
        //细节1:
        //a.txt:
        //      a 文件名
        //      txt 后缀名、扩展名
        //细节2:
        //文件夹:返回的就是文件夹的名字
        File f7 = new File("D:\\Java学习\\a.txt");
        String name1 = f7.getName();
        System.out.println(name1);


        File f8 = new File("D:\\Java学习\\bbb");
        String name2 = f8.getName();
        System.out.println(name2);//bbb

        System.out.println("====================================");
        //5.lastModified  返回文件的最后修改时间(时间毫秒值)
        File f9 = new File("D:\\Java学习\\a.txt");
        long time = f9.lastModified();
        System.out.println(time);//1667380952425
        System.out.println("====================================");
        //如何把时间的毫秒值变成字符串表示的时间呢?
        //课堂练习:
        //yyyy年MM月dd日 HH:mm:ss
        Date d=new Date(1667380952425l);
        DateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String str = df.format(d);
        System.out.println(str);

    }
}

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

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

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

package File;

import java.io.File;

/*
      public boolean isDirectory()        判断此路径名表示的File是否为文件夹
      public boolean isFile()             判断此路径名表示的File是否为文件
      public boolean exists()             判断此路径名表示的File是否存在

   */
public class demo2 {
    public static void main(String[] args) {
        //1.对一个文件的路径进行判断
        File f1=new File("D:\\Java学习\\a.txt");
        System.out.println(f1.isDirectory());
        System.out.println(f1.exists());
        System.out.println(f1.isFile());
        System.out.println("----------------------------");
        //2.对一个文件夹的路径进行判断
        File f2=new File("D:\\Java学习\\bbb");
        System.out.println(f2.isDirectory());
        System.out.println(f2.exists());
        System.out.println(f2.isFile());
        System.out.println("----------------------------");
        //3.对一个不存在的路径进行判断
        File f3 = new File("D:\\Java学习\\1.txt");
        System.out.println(f3.isDirectory());//false
        System.out.println(f3.isFile());//false
        System.out.println(f3.exists());//false
    }
}

创建删除功能的方法

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

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

  • public boolean mkdir() :创建由此File表示的目录。

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

package File;

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

/*
        public boolean createNewFile()      创建一个新的空的文件
        public boolean mkdir()              创建单级文件夹
        public boolean mkdirs()             创建多级文件夹
        public boolean delete()             删除文件、空文件夹
      */
public class demo4 {
    public static void main(String[] args) throws IOException {
        //1.createNewFile 创建一个新的空的文件
        //细节1:如果当前路径表示的文件是不存在的,则创建成功,方法返回true
        //      如果当前路径表示的文件是存在的,则创建失败,方法返回false
        //细节2:如果父级路径是不存在的,那么方法会有异常IOException
        //细节3:createNewFile方法创建的一定是文件,如果路径中不包含后缀名,则创建一个没有后缀的文件
        File f1=new File("D:\\Java学习\\r");
        boolean newFile = f1.createNewFile();
        System.out.println(newFile);

        //2.mkdir   make Directory,文件夹(目录)
        //细节1:windows当中路径是唯一的,如果当前路径已经存在,则创建失败,返回false
        //细节2:mkdir方法只能创建单级文件夹,无法创建多级文件夹。
        File f2 = new File("D:\\Java学习\\hhh");
        boolean b = f2.mkdir();
        System.out.println(b);

        //3.mkdirs   创建多级文件夹
        //细节:既可以创建单级的,又可以创建多级的文件夹
        File f3 = new File("D:\\Java学习\\aaa\\bbb");
        boolean b2 = f3.mkdirs();
        System.out.println(b2);//true

    }
}

package File;

import java.io.File;

public class demo5 {
    public static void main(String[] args) {
          /*
        public boolean delete()             删除文件、空文件夹
        细节:
            如果删除的是文件,则直接删除,不走回收站。
            如果删除的是空文件夹,则直接删除,不走回收站
            如果删除的是有内容的文件夹,则删除失败
      */


        //1.创建File对象
        File f1 = new File("D:\\Java学习\\hhh");
        //2.删除
        boolean b = f1.delete();
        System.out.println(b);

    }
}

目录的遍历

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

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

package File;

import java.io.File;

public class demo65 {
    public static void main(String[] args) {
        //public File[] listFiles()       获取当前该路径下所有内容
        //1.创建File对象
        File f = new File("D:\\Java学习");
        //2.listFiles方法
        //作用:获取aaa文件夹里面的所有内容,把所有的内容放到数组中返回
        File[] files = f.listFiles();
        for (File file : files) {
            //file依次表示Java学习文件夹里面的每一个文件或者文件夹
            if (file.isFile() && file.getName().endsWith(".txt")) {
                System.out.println(file);
            }
        }
    }
}

3.练习

练习1:创建文件夹

在当前模块下Java学习文件夹中创建一个vv.txt文件

package lx;

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

public class demo1 {
    public static void main(String[] args) throws IOException {
        //在当前模块下的aaa文件夹中创建一个a.txt文件
        //需求:在当前模块下的aaa文件夹中创建一个a.txt文件

        //1.创建a.txt的父级路径
        File f1 = new File("aaa");
        //2.创建父级路径
        //如果aaa是存在的,那么此时创建失败的。
        //如果aaa是不存在的,那么此时创建成功的。
        //创建多级文件夹
        f1.mkdirs();
        //3.拼接父级路径和子级路径
        File f2 = new File(f1,"a.txt");
        boolean b = f2.createNewFile();
        if(b){
            System.out.println("创建成功");
        }else{
            System.out.println("创建失败");
        }


    }
}

练习2:查找文件(不考虑子文件夹)

定义一个方法找某一个文件夹中,是否有以txt结尾的的电影(暂时不需要考虑子文件夹)

package lx;

import java.io.File;

public class demo2 {
    //定义一个方法找某一个文件夹中,是否有以txt结尾的(暂时不需要考虑子文件夹)文件
    public static void main(String[] args) {
        File f1 = new File("D:\\Java学习\\aaa");

        boolean b = haveTxt(f1);
        System.out.println(b);
    }

    /*
     * 作用:用来找某一个文件夹中,是否有以txt结尾
     * 形参:要查找的文件夹
     * 返回值:查找的结果  存在true  不存在false
     * */
    public static boolean haveTxt(File f1) {
        //1.进入aaa文件夹,而且要获取里面所有的内容
        File[] files = f1.listFiles();
        for (File file : files) {
            if(file.isFile() && file.getName().endsWith(".txt")) {
                return true;
            }
        }
        //3.如果循环结束之后还没有找到,直接返回false
        return false;

    }
}

练习3:(考虑子文件夹)

找到电脑中所有以txt结尾。(需要考虑子文件夹)

package lx;

import java.io.File;

public class demo3 {
    public static void main(String[] args) {
         /* 需求:
        找到电脑中所有以txt结尾的文件。(需要考虑子文件夹)
        套路:
            1,进入文件夹
            2,遍历数组
            3,判断
            4,判断

        */
        findTXT();

    }

    public static void findTXT() {
        //获取本地所有的盘符
        File[] arr = File.listRoots();
        for (File f : arr) {
            findTXT(f);
        }
    }

    public static void findTXT(File src) {//"C:\\
        //1.进入文件夹src
        File[] files = src.listFiles();
        //2.遍历数组,依次得到src里面每一个文件或者文件夹
        if (files != null) {
            for (File file : files) {
                if (file.isFile()) {
                    //3,判断,如果是文件,就可以执行题目的业务逻辑
                    String name = file.getName();
                    if (name.endsWith(".txt")) {
                        System.out.println(file);
                    }
                } else {
                    //4,判断,如果是文件夹,就可以递归
                    //细节:再次调用本方法的时候,参数一定要是src的次一级路径
                    findTXT(file);
                }
            }
        }
    }
}
package lx;

import java.io.File;

public class demo3 {
    public static void main(String[] args) {
         /* 需求:
        找到电脑中所有以txt结尾的文件。(需要考虑子文件夹)
        套路:
            1,进入文件夹
            2,遍历数组
            3,判断
            4,判断

        */
        findTXT();

    }

    public static void findTXT() {
        //获取本地所有的盘符
        File[] arr = File.listRoots();
        for (File f : arr) {
            findTXT(f);
        }
    }

    public static void findTXT(File src) {//"C:\\
        //1.进入文件夹src
        File[] files = src.listFiles();
        //2.遍历数组,依次得到src里面每一个文件或者文件夹
        if (files != null) {
            for (File file : files) {
                if (file.isFile()) {
                    //3,判断,如果是文件,就可以执行题目的业务逻辑
                    String name = file.getName();
                    if (name.endsWith(".txt")) {
                        System.out.println(file);
                    }
                } else {
                    //4,判断,如果是文件夹,就可以递归
                    //细节:再次调用本方法的时候,参数一定要是src的次一级路径
                    findTXT(file);
                }
            }
        }
    }
}

练习4:删除多级文件夹

需求: 如果我们要删除一个有内容的文件夹

1.先删除文件夹里面所有的内容

2.再删除自己

代码示例:

package lx;

import java.io.File;

public class demo4 {
    public static void main(String[] args) {
           /*
           删除一个多级文件夹
           如果我们要删除一个有内容的文件夹
           1.先删除文件夹里面所有的内容
           2.再删除自己
        */

        File file = new File("D:\\Java学习\\bbb");
        DealTXT(file);


    }

    /*
     * 作用:删除src文件夹
     * 参数:要删除的文件夹
     * */
    public static void DealTXT(File src) {//"C:\\
        //1.进入文件夹src
        File[] files = src.listFiles();
        //2.遍历数组,依次得到src里面每一个文件或者文件夹
        if (files != null) {
            for (File file : files) {
                //判断,如果是文件,删除
                if (file.isFile()) {
                    file.delete();
                } else {
                    //4,判断,如果是文件夹,就可以递归
                    //细节:再次调用本方法的时候,参数一定要是src的次一级路径
                    //判断,如果是文件夹,就递归
                    DealTXT(file);
                }
            }
            //2.再删除自己
            src.delete();
        }
    }
}

分析:

1.首先进入src文件夹,创建数组记录获取当前该路径下所有内容,内容是a.txt,b.txt,aaa文件夹,第一次循环遍历scr文件夹里面的内容,file依次表示该文件夹里面的每一个文件或者文件夹。先判断file这个文件是否存在,如果存在则直接删除,显然这里的a.txt,b.txt存在所以删除了,如果不存在就递归,

2.然后看第二副图,显然这里的形参为aaa文件夹,循环遍历,这里的file依次表示该文件夹里面的每一个文件或者文件夹,也就是aa.txt和空文件夹,循环判单删除了aa.txt文件,

3.第三幅图,显然这里的形参是空文件夹,此时数组的长度为0,循环判断进不去,就直接删除了空的文件夹,然后递归往返,

4.递归往返,先删除了aaa文件夹,然后删除了src文件

练习5:统计大小

需求:统计一个文件夹的总大小

package lx;

import java.io.File;

public class demo5 {
    public static void main(String[] args) {
           /*需求:
            统计一个文件夹的总大小
      */


        File file=new File("D:\\Java学习\\aaa");
        long len = getLen(file);
        System.out.println(len);

    }

    private static long getLen(File file) {
        long len = 0;
        if(file!=null){
            //进入file文件夹
            File[] files=file.listFiles();
            for(File f:files){
                if(f.isFile()){
                    len+=f.length();
                }else{
                    len+=getLen(f);
                }
            }
        }
        return len;
    }
}

分析:

1.首先创建数组循环遍历scr下的文件,如a.txt,b.txt,a文件夹,第一次循环遍历累加的就是把a.txt,b.txt的字节累加在一起,第二次进入循环,递归了一下,把a文件夹的所有的文本文件累加在一起,最后返回给了第一次循环遍历的结果

练习6:统计文件个数

需求:统计一个文件夹中每种文件的个数并打印。(考虑子文件夹) 打印格式如下: txt:3个 doc:4个 jpg:6个

package lx;

import java.io.File;
import java.util.HashMap;

public class demo7 {

    static HashMap<String, Integer> hm = new HashMap<>();

    public static void main(String[] args) {
         /*
            需求:统计一个文件夹中每种文件的个数并打印。(考虑子文件夹)
            打印格式如下:
            txt:3个
            doc:4个
            jpg:6个
        */
        File file = new File("D:\\Java学习\\aaa");

        HashMap<String, Integer> hm = getCount(file);
        System.out.println(hm);
    }

    /*
     * 作用:
     *       统计一个文件夹中每种文件的个数
     * 参数:
     *       要统计的那个文件夹
     * 返回值:
     *       用来统计map集合
     *       键:后缀名 值:次数

     */
    private static HashMap<String, Integer> getCount(File src) {
        //进入src文件夹
        File[] files = src.listFiles();
        //循环遍历每一个文件
        for (File file : files) {
            //file代表的就是每一个文件
            //判断,如果是文件,统计
            if (file.isFile()) {
                //先获取每一个文件名
                String name = file.getName();
                //再获取每一个文件的后缀
                String[] arr = name.split("\\.");
                //这里的arr.length就是以.为分割,文件的长度,如1.txt的就是 1和txt,数组长度为2
                //为3的就是 1.txt.obj ---1 和txt 和obj
                if (arr.length >= 2) {
                    //获取结尾的后缀
                    String endName = arr[arr.length - 1];
                    //在hm集合里查看这个后缀有吗
                    if (hm.containsKey(endName)) {
                        //存在count++
                        //通过键获取值 也就是通过后缀名来计算出改文件有多少个
                        int count = hm.get(endName);
                        //最后把改文件以及次数添加在hm集合当中
                        hm.put(endName, count + 1);
                    } else {
                        //不存在count为1
                        //说明改文件的次数就一个,直接添加在集合当中即可
                        hm.put(endName, 1);
                    }
                }
            } else {
                //如果不是文件,是文件夹,则递归
                //细节:再次调用本方法的时候,参数一定要是src的次一级路径
                //用来统计子文件夹的文件个数
                //递归来累计子文件夹里的文件个数最后添加在hm集合当中
                getCount(file);

            }
        }
        return hm;
    }
}

 

  • 30
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值