Java里面的File

Java里面的File

  • File对象表示路径

  • 这个路径可以是存在的,也可以是不存在的

在Java中,File是一个类,它位于java.io包中,用于文件和文件目录路径名的抽象表示形式。File类本身并不涉及文件的读取和写入,它主要用于操作文件或目录的路径名,例如创建、删除、检查文件或目录是否存在等。

用途

  • 文件或目录的创建:使用createNewFile()方法创建文件,使用mkdirs()方法创建目录。
  • 检查文件或目录是否存在:使用exists()方法。
  • 获取文件或目录的属性:如名称、大小、最后修改时间等。
  • 删除文件或目录:使用delete()方法。
  • 列出目录中的文件:使用listFiles()方法。

如何使用

下面是一个简单的例子,演示了如何使用File类来创建文件、检查文件是否存在以及删除文件:

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

public class FileExample {
    public static void main(String[] args) {
        // 创建一个File对象,表示一个文件路径
        File file = new File("test.txt");

        // 检查文件是否存在
        if (!file.exists()) {
            // 如果文件不存在,则创建它
            try {
                file.createNewFile();
                System.out.println("文件已创建!");
            } catch (IOException e) {
                e.printStackTrace();
            }
        } else {
            System.out.println("文件已存在!");
        }

        // 删除文件
        if (file.delete()) {
            System.out.println("文件已删除!");
        } else {
            System.out.println("文件删除失败!");
        }
    }
}

注意事项

  1. 文件路径:在使用File类时,需要注意文件路径的正确性。如果路径不正确或文件不存在,可能会导致操作失败。
  2. 异常处理:当进行文件操作时,如创建文件或删除文件,可能会抛出IOException。因此,需要进行异常处理,确保程序的健壮性。
  3. 文件权限:在某些操作系统中,文件的创建、删除和读写等操作可能受到文件权限的限制。因此,需要确保程序有足够的权限来执行这些操作。
  4. 线程安全File类的实例不是线程安全的。如果在多线程环境中使用同一个File实例进行文件操作,可能会导致不可预期的结果。
  5. 资源释放:虽然File类本身不涉及文件的读取和写入,但如果你在使用FileInputStreamFileOutputStreamFileReaderFileWriter等类进行文件操作时,需要注意及时关闭这些资源,以避免资源泄漏。

遍历并获取

package com.mohuanan.file;

import java.io.File;

public class Demo03 {
    public static void main(String[] args) {
        //创建File对象
        File f1 = new File("D:\\testfile");
        //遍历f1
        File[] files = f1.listFiles();
        for (int i = 0; i < files.length; i++) {
            System.out.println(files[i]);

        }
        System.out.println(files.length);
    }
}

常见的方法

在Java中,File类提供了许多常见的方法来操作文件和目录。以下是一些常见的File类方法:

  1. 构造方法
  • File(String pathname): 根据给定的路径名字符串创建一个新的File实例。
  • File(String parent, String child): 根据父路径名字符串和子路径名字符串创建一个新的File实例。
  • File(File parent, String child): 根据父File实例和子路径名字符串创建一个新的File实例。
  1. 判断文件或目录是否存在
  • boolean exists(): 检查此抽象路径名表示的文件或目录是否存在。
  1. 判断是否为文件或目录
  • boolean isFile(): 测试此抽象路径名是否表示一个已存在的普通文件。
  • boolean isDirectory(): 测试此抽象路径名是否表示一个目录(也可能是空的)。
  1. 获取文件或目录的信息
  • String getName(): 返回由此抽象路径名表示的文件或目录的名称。
  • String getAbsolutePath(): 返回此抽象路径名的绝对路径名字符串。
  • File getParentFile(): 返回此抽象路径名父目录的抽象路径名。如果此路径名没有指定父目录,则返回null
  1. 文件或目录的创建
  • boolean createNewFile(): 当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
  • boolean mkdir(): 创建一个新的目录。
  • boolean mkdirs(): 创建此抽象路径名指定的目录,包括任何必需但不存在的父目录。
  1. 文件或目录的删除
  • boolean delete(): 删除此抽象路径名表示的文件或目录。
  • void deleteOnExit(): 请求在虚拟机终止时删除此抽象路径名表示的文件或目录。
  1. 重命名文件或目录
  • boolean renameTo(File dest): 将此抽象路径名重命名为给定的目标抽象路径名。
  1. 检查是否为隐藏文件或目录
  • boolean isHidden(): 测试此抽象路径名指定的文件是否是一个隐藏的文件。
  1. 检查是否为绝对路径
  • boolean isAbsolute(): 测试此抽象路径名是否为绝对路径名。

这只是File类提供的一些常见方法,实际上还有其他一些方法,但上述方法通常是在日常编程中最常用的。需要注意的是,File类主要用于文件和目录的路径名管理,而不涉及文件内容的读写操作。如果要读写文件内容,需要使用其他类,如FileReaderFileWriterBufferedReaderBufferedWriter等。

综合案例

遍历电脑的所有文件

package com.mohuanan.fileexercise;

import java.io.File;

public class Demo03 {
    public static void main(String[] args) {

        findAllPan();

    }

    //找到所有的盘符
    public static void findAllPan(){
        //使用静态方法
        File[] files = File.listRoots();
        //遍历数组
        for (int i = 0; i < files.length; i++) {
            //调用findAvi方法
            findAvi(files[i]);
        }
    }


    //找盘符下的所有文件
    public static void findAvi(File file) {
        //1. 进入文件
        File[] files = file.listFiles();
        //4. 判断 因为有的文件是有权限限制的  当文件有权限限制的时候 就返回null
        if (files != null) {
            //2. 遍历数组
            for (File f : files) {
                //3. 判断
                if (f.isFile()) {
                    String name = f.getName();
                    if (name.endsWith(".md")) {
                        System.out.println(f);
                    }
                } else {
                    findAvi(f);
                }

            }
        }

    }
}

删除指定路径所有的文件和文件夹

package com.mohuanan.fileexercise;

import java.io.File;

public class Demo04 {
    public static void main(String[] args) {
        //创建File对象
        File f = new File("D:\\aaa");
        //记得要去调用方法
        deleteFiles(f);

    }

    /*
     * 作用:删除指定路径所有的文件和文件夹
     * */
    public static void deleteFiles(File file) {
        //1. 进入文件
        File[] files = file.listFiles();
        //因为有些是有权限的
        if (files != null) {
            //2. 遍历数组
            for (File f : files) {
                //3. 判断
                if (f.isFile()) {
                    f.delete();
                } else if (f.isDirectory()) {
                    //递归
                    deleteFiles(f);

                }
            }
            //删除自己
            file.delete();
        }

    }
}

统计文件的大小

package com.mohuanan.fileexercise;

import java.io.File;

public class Demo05 {
    public static void main(String[] args) {
        //创建File对象
        File f = new File("D:\\marktext的文档");
        long big = getBig(f);
        System.out.println("文件的大小为: "+ big/1024/1024);
    }

    /*
    * 参数一 :表示文件的路径
    * 返回值: 该文件夹里面所有的文件的大小
    * 作用: 统计该路径下的所有文件的大小 (字节数)
    *
    * */
    public static long getBig(File file){
        //统计文件的大小
        long len = 0;
        //1. 进入文件
        File[] files = file.listFiles();
        //2. 遍历数组
        for (File f : files) {
            //3. 判断
            if(f.isFile()){
                //如果是文件
                //累加
                len = len + f.length();
            }else{
                //递归
                //累加
                len = len + getBig(f);
            }
        }
        return len;
    }

}

统计文件的个数

package com.mohuanan.fileexercise;

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

public class Demo06 {
    public static void main(String[] args) {
        //创建File对象
        File f = new File("D:\\marktext的文档");
        HashMap<String, Integer> count = getCount(f);
        Set<Map.Entry<String, Integer>> entries = count.entrySet();
        for (Map.Entry<String, Integer> entry : entries) {
            System.out.println(entry);
        }
    }

    /*
     * 参数表示: 文件的路径
     * 返回值: 该子文件的文件的个数
     * 作用: 统计文件夹的所有的文件的个数,包括子文件夹
     * */
    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[] split = f.getName().split("\\.");
                //获取文件后缀
                String name = split[split.length - 1];
                //是否已经在集合里面
                if (hm.containsKey(name)) {
                    //在集合里面 次数累加
                    int count = hm.get(name);
                    count++;
                    hm.put(name, count);
                } else {
                    //不在集合里面
                    hm.put(name, 1);
                }

            } else {
                //是文件夹 递归
                HashMap<String, Integer> tempHm = getCount(f);
                //将返回值tempHm 累加到hm里
                //遍历tempHm集合
                Set<Map.Entry<String, Integer>> entries = tempHm.entrySet();
                for (Map.Entry<String, Integer> entry : entries) {
                    String key = entry.getKey();
                    int value = entry.getValue();
                    if (hm.containsKey(key)) {
                        //和hm集合里面的键重复 累加
                        int t = hm.get(key);
                        int total = value + t;
                        hm.put(key, total);
                    } else {
                        //首次
                        hm.put(key, value);
                    }
                }
            }
        }

        return hm;
    }
}

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值