Java-File类详解(举例+代码)-文件处理的万能模板

java.io.File 类在 Java 中用于表示文件和目录。它提供了各种用于执行文件相关操作的方法,如创建文件、删除文件、检查文件属性、导航目录等等。这是 Java 中用于处理文件和目录的基本类。

1,以下是创建文件对象的基本方法

package File;

import java.io.File;

public class demo1
{
    //File表示路径,可以是文件或者文件夹
    //带盘符的是绝对路径,不带盘符是相对路径
    /*
    public File(String pathname) 根据文件路径创建文件对象
    public File(String parent,String child) 根据父路径名字字符和子路径名字字符串创建文件对象
    public File(File parent,String child) 根据父路径对应的文件对象和子路径名字符串创建文件对象

    C:\Users\18878\Desktop
     */

    public static void main(String[] args)
    {
        //1.根据字符串表示路径,变成file对象
        String str = "C:\\Users\\18878\\Desktop\\a.txt";
        File f1 = new File(str);
        System.out.println(f1);//C:\Users\18878\Desktop\a.txt

        //2.父级路径:C:\Users\18878\Desktop
        //子级路径:a.txt
        String parent = "C:\\Users\\18878\\Desktop";
        String child = "a.txt";
        File f2 = new File(parent,child);
        System.out.println(f2);

        //3.把一个File表示的路径和String表示的路径拼接
        File  parent2 = new File("C:\\Users\\18878\\Desktop");
        String child2 = "a.txt";
        File f3 = new File(parent2,child2);
        System.out.println(f3);

        System.out.println(f3.length());
        System.out.println(f3.exists());

    }
}

2,创建文件

package File;

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

public class demo2
{
    //需求在当前模块下的aaa文件夹中创建一个a.txt文件
    public static void main(String[] args) throws IOException
    {
        //1.创建a.txt父级路径
        File file = new File("\\aaa");
        //2.创建父级路径
        file.mkdirs();//创建aaa文件夹
        //3.拼接父级与子级路径
        File src = new File(file,"a.txt");
        boolean b = src.createNewFile();
        if (b)
            System.out.println("创建成功");
        else
            System.out.println("创建失败");
    }
}

3,查找文件夹中的相关文件

package File;
import java.io.File;
public class demo3
{
    //定义一个方法,找某个文件夹中是否有以avi结尾的电影
    public static void main(String[] args)
    {
        File file  = new File(".\\aaa\\bbb");
        boolean haveavi = haveavi(file);
        System.out.println(haveavi);
    }

    public static boolean haveavi(File file){
        //进入aaa文件夹获取内容
        File[] files = file.listFiles();//listFiles()方法将返回包含文件夹中所有文件的数组
        //遍历数组获取内容
        for (File file1 : files)
        {
            //file1表示file下的每一个文件或者文件夹
            if (file1.isFile() && file1.getName().endsWith(".avi"))
                return true;
        }
        return false;//没找到返回false
    }
}

4,查找文件夹中的相关文件(考虑子文件夹)

在文件夹中有子文件夹的情况,我们很容易想到利用递归的方式,碰到文件夹就采用同样的操作,我也总结出了处理文件的万能套路。

  • 套路:
    • 1,进入文件夹
    • 2,遍历数组
    • 3,判断
    • 4,判断
package File;

import java.io.File;

public class demo4
{
    /*需求找到电脑中所有以avi结尾的电影(需考虑子文件夹)
    *
    * 套路:
    * 1,进入文件夹
    * 2,遍历数组
    * 3,判断
    * 4,判断
    * */
    public static void main(String[] args)
    {
        File src = new File("C:\\");
        findAVI(src);
    }

    public static void findAVI(File src){
        //1 进入文件夹
        File[] files = src.listFiles();//如果碰有权限的文件夹会返回null
        if (files !=  null)
        //2 遍历数组,依次得到每一个内容
        for (File file : files)
        {
             // 3判断如果是文件,执行题目业务逻辑
            if(file.isFile()){
                String name = file.getName();
                if (name.endsWith(".avi")){
                    System.out.println(file.getAbsoluteFile());
                }
            }else{
            // 4判断如果是文件夹则递归
                findAVI(file);
            }
        }
    }
}

仔细琢磨以上代码,以后碰到处理文件相关的问题,可以直接套用

5,删除一个多级文件夹

  • 如果要删除一个有内容的文件夹
    * 1,先删除文件夹中所有内容
    * 2,再删除自己
package File;
import java.io.File;
public class demo5
{
    /*
    * 删除一个多级文件夹
    * 如果要删除一个有内容的文件夹
    * 1,先删除文件夹中所有内容
    * 2,再删除自己
    * */
    public static void main(String[] args)
    {
        File file = new File(".\\aaa");
        delete(file);
    }
    public static void delete(File file){
        //先删除文件夹中的内容
        //1,进入文件夹
        File[] file1 = file.listFiles();
        //2,遍历
        for (File file2 : file1)
        {
            //判断如果是文件则删除
            if (file2.isFile()){
                //3,判断
                file2.delete();
            }else {
                //4,判断
                //判断如果是文件夹则递归
                delete(file2);
            }
        }
        file.delete();
        //再删除自己
    }
}

6,计算文件夹大小(考虑子文件夹)

package File;

import java.io.File;

public class demo6
{
    /*
    * 需求:计算文件夹大小(考虑子文件夹)
    * */
    public static void main(String[] args)
    {
        File file = new File(".\\");
        long len = getLen(file);
        System.out.println(len);
    }
    //统计一个文件夹的总大小
    public static long getLen(File file){
        long len = 0;
        File[] files = file.listFiles();
        for (File f : files)
        {
            if (f.isFile()){
                //如果是文件把当前文件大小累加到len中
                len = len + f.length();
            }else {
                //如果是文件夹就递归
                len = len + getLen(f);//记得累加递归的结果
            }
        }
        return len;
    }
}

7,统计文件夹中各种文件的个数(包含子文件夹)

package File;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class demo7
{
    /*
    * 统计文件夹中各种文件的个数(包含子文件夹)
    *
    * 知识点:
    * File 递归 Map集合
    * */
    public static void main(String[] args)
    {
        File file = new File(".\\");
        HashMap<String, Integer> count = getCount(file);
        System.out.println(count);

    }
    public static HashMap<String,Integer> getCount(File file){
        HashMap<String,Integer> hm = new HashMap<>();
        //1,进入文件夹
        File[] files = file.listFiles();
        //2,遍历
        for (File f : files)
        {
            //3,判断
            if(f.isFile()){
                String name = f.getName();
                String[] split = name.split("\\.");
                if (split.length>=2){
                    String endName = split[split.length-1];
                    if (hm.containsKey(endName)){
                        Integer count = hm.get(endName);
                        count++;
                        hm.put(endName,count);
                    }else{
                        hm.put(endName,1);
                    }
                }
            }else {
                //sunmap表示子文件夹中个数
                HashMap<String, Integer> sonMap = getCount(f);//递归
                //与父文件夹结果累加
                Set<Map.Entry<String, Integer>> entries = sonMap.entrySet();
                for (Map.Entry<String, Integer> entry : entries)
                {
                    String key = entry.getKey();
                    int value = entry.getValue();
                    if (hm.containsKey(key)){
                        //存在
                        Integer count = hm.get(key);
                        count = count + value;
                        hm.put(key,count);
                    }
                    else{
                        //不存在
                        hm.put(key,value);
                    }
                }
            }
        }
        return hm;
    }
}

这就是java当中对于文件的操作,记住以下套路便可得心应手

  • 套路:
    • 1,进入文件夹
    • 2,遍历数组
    • 3,判断(判断是否为文件,按照文件要求操作)
    • 4,判断(判断是否为文件夹,按照文件夹要求操作)
      核心代码如下:
package File;

import java.io.File;

public class demo4
{
    /*需求找到电脑中所有以avi结尾的电影(需考虑子文件夹)
    *
    * 套路:
    * 1,进入文件夹
    * 2,遍历数组
    * 3,判断
    * 4,判断
    * */
    public static void main(String[] args)
    {
        File src = new File("C:\\");
        findAVI(src);
    }

    public static void findAVI(File src){
        //1 进入文件夹
        File[] files = src.listFiles();//如果碰有权限的文件夹会返回null
        if (files !=  null)
        //2 遍历数组,依次得到每一个内容
        for (File file : files)
        {
             // 3判断如果是文件,执行题目业务逻辑
            if(file.isFile()){
                String name = file.getName();
                if (name.endsWith(".avi")){
                    System.out.println(file.getAbsoluteFile());
                }
            }else{
            // 4判断如果是文件夹则递归
                findAVI(file);
            }
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值