• Java:File类


    目录

    File类

    1、File的常见成员方法(判断、获取)

    2、File类,创建和删除

    3、File类 获取并遍历


    File类

    File对象就表示一个路径,可以是文件的路径、也可以是文件夹的路径

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

    常见构造方法

    方法名说明
    public File(String pathname)根据文件路径创建文件对象
    public File(String parent,String child)根据父路径名字符串和子路径名字符串创建文件对象
    public File(File parent,string child)根据父路径对应文件对象和子路径名字符串创建文件对象

    示例:

    1. //根据字符串表示的路径,变成File对象
    2. String str = "C:\\Users\\15562\\Desktop\\a.txt";
    3. File file1 = new File(str);
    4. System.out.println(file1);
    5. //父级路径:C:\Users\15562\Desktop
    6. //子级路径:a.txt
    7. String parent1 = "C:\\Users\\15562\\Desktop";
    8. String child = "a.txt";
    9. File file2 = new File(parent1,child);
    10. System.out.println(file2);
    11. File file3 = new File(parent1 + "\\" + child);
    12. System.out.println(file3);
    13. //把一个File表示的路径和String表示的路径进行拼接
    14. File parent2 = new File("C:\\Users\\15562\\Desktop");
    15. String child2 = "a.txt";
    16. File file4 = new File(parent2,child2);
    17. System.out.println(file4);

    绝对路径和相对路径是什么意思?

    绝对路径是带盘符的。

    相对路径是不带盘符的,默认到当前项目下去找。

    1、File的常见成员方法(判断、获取)

    方法名称说明
    public boolean isDirectory()判断此路径名表示的File是否为文件夹
    public boolean isFile()判断此路径名表示的File是否为文件
    public boolean exists()判断此路径名表示的File是否存在
    public long length()返回文件的大小(字节数量)
    public string getAbsolutePath()返回文件的绝对路径
    public string getPath()返回定义文件时使用的路径
    public string getName()返回文件的名称,带后缀
    public long lastModified()返回文件的最后修改时间(时间毫秒值)

      isDirectory(), isFile(),exists()

    1. //对一个文件的路径进行判断
    2. File file = new File("D:\\aaa\\a.txt");
    3. //判断此路径名表示的File是否为文件夹
    4. System.out.println(file.isDirectory());//false
    5. //判断此路径名表示的File是否为文件
    6. System.out.println(file.isFile());//ture
    7. //判断此路径名表示的File是否存在
    8. System.out.println(file.exists());//ture
    9. System.out.println("----------------------");
    10. //对一个文件夹的路径进行判断
    11. File file1 = new File("D:\\aaa\\bbb");
    12. //判断此路径名表示的File是否为文件夹
    13. System.out.println(file1.isDirectory());//ture
    14. //判断此路径名表示的File是否为文件
    15. System.out.println(file1.isFile());//false
    16. //判断此路径名表示的File是否存在
    17. System.out.println(file1.exists());//ture
    18. System.out.println("-----------------");
    19. //对不存在的一个文件的路径进行判断
    20. File file2 = new File("D:\\aaa\\b.txt");
    21. //判断此路径名表示的File是否为文件夹
    22. System.out.println(file2.isDirectory());//false
    23. //判断此路径名表示的File是否为文件
    24. System.out.println(file2.isFile());//false
    25. //判断此路径名表示的File是否存在
    26. System.out.println(file2.exists());//false

    length(),getAbsolutePath(),getPath(),getName()

    1. //1.length返回文件的大小(字节数量>
    2. //细节1:这个方法只能获取文件的大小,单位是字节
    3. //如果单位我们要是M,G,可以不断的除以1024
    4. //细节2:这个方法无法获取文件夹的大小
    5. //如果我们要获取一个文件夹的大小,需要把这个文件夹里面所有的文件大小都累加在一起。
    6. File file = new File("D:\\aaa\\a.txt");
    7. long len = file.length();
    8. System.out.println(len);//0
    9. //返回文件绝对路径
    10. String path1 = file.getAbsolutePath();
    11. System.out.println(path1);//\aaa\a.txt
    12. //返回定义文件时使用的路径
    13. String path2 = file.getPath();
    14. System.out.println(path2);//\aaa\a.txt
    15. //获取文件名
    16. //文件夹:就是文件夹的名字
    17. String name1 = file.getName();
    18. System.out.println(name1);//a.txt

    2、File类,创建和删除

    方法名称说明
    public boolean createNewFile()创建一个新的空的文件
    public boolean mkdir()创建单级文件夹
    public boolean mkdirs()创建多级文件夹
    public boolean delete()删除文件、空文件夹

     createNewFile(),mkdir(),mkdirs(),delete()

    1. //1.createNewFile 创建一个新的空的文件
    2. //细节1: 如果当前路径表示的文件是不存在的,则创建成功,方法返回true
    3. // 如果当前路径表示的文件是存在的,则创建失败,方法返回false
    4. // 细节2:如果父级路径是不存在的,那么方法会有异常IOException
    5. //细节3: createNewFile方法创建的一定是文件,如果路径中不包含后缀名,则创建一个没有后缀的文件
    6. File f1 = new File( "D:\\aaa\\ddd" );
    7. boolean b1 = f1.createNewFile();
    8. System.out.println(b1); //true
    9. // 2.mkdir make Directory,文件夹(目录>
    10. //细节1: windows当中路径是唯一的,如果当前路径已经存在,则创建失败,返回false
    11. // 细节2: mkdir方法只能创建单级文件夹,无法创建多级文件夹。
    12. File f2 = new File("D:\\aaa\\aaa\\bbb\\ccc " );
    13. boolean b2 = f2.mkdir();
    14. System.out.println(b2);//false
    15. // 3.mkdirs创建多级文件夹
    16. //细节:既可以创建单级的,又可以创建多级的文件夹
    17. File f3 = new File( "D:\\aaa\\ggg" );
    18. boolean b3 = f3.mkdirs();
    19. System.out.println(b3); //true
    20. //删除文件或空文件夹
    21. boolean delete = f3.delete();
    22. System.out.println(delete);//true

    3、File类 获取并遍历

    方法名说明
    public File[ ] listFiles()获取当前该路径下所有内容
    1. //创建File对象
    2. File f1 = new File( "D:\\aaa" );
    3. //listFiles方法
    4. //作用:获取aaa文件夹里面的所有内容,把所有的内容放到数组中返回
    5. File[] files = f1.listFiles();
    6. for (File file : files) {
    7. //file依次表示aaa文件夹里面的每一个文件或者文件夹
    8. System.out.println(file);
    9. }

     注意:

    1、当调用者File表示的路径不存在时,返回null

    2、当调用者File表示的路径是文件时,返回null

    3、当调用者File表示的路径是一个空文件夹时,返回一个长度为0的数组

    4、当调用者File表示的路径是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回

    5、当调用者File表示的路径是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在

    File数组中返回,包含隐藏文件

    6、当调用者File表示的路径是需要权限才能访问的文件夹时,返回null

    方法名说明
    public static File[] listRoots()列出可用的文件系统根
    public string[ ] list()获取当前该路径下所有内容
    public string[ ] list(FilenameFilter filter)利用文件名过滤器获取当前该路径下所有内容
    public File[ ] listFiles()获取当前该路径下所有内容
    public File[] listFiles(FileFilter filter)利用文件名过滤器获取当前该路径下所有内容
    public File[] listFiles(FilenameFilter filter)利用文件名过滤器获取当前该路径下所有内容

     listRoots(), list() ,list(FilenameFilter filter)

    1. //1.liStRoots获取系统中所有的盘符
    2. File[]arr = File.listRoots();
    3. System.out.println(Arrays.toString(arr));
    4. //2.list()获取当前该路径下所有内容(仅仅能获取名字)
    5. File f1 = new File("D:\\aaa");
    6. String[] arr2 = f1.list();
    7. for (String s : arr2)
    8. System.out.println(s);
    9. //3.list(FilenameFilter filter)利用文件名过滤器获取当前该路径下所有内容
    10. //需求:现在要获取D:\\aaa文件夹里面所有的txt文件
    11. File f2 = new File("D:\\aaa");
    12. //accept方法的形参,依次表示aaa文件夹里面每一个文件或者文件夹的路径
    13. //参数一:父级路径
    14. //参数二:子级路径
    15. //返回值:如果返回值为true,就表示当前路径保留
    16. //如果返回值为false,就表示当前路径舍弃不要
    17. String[] arr3 = f2.list(new FilenameFilter() {
    18. @Override
    19. public boolean accept(File dir, String name) {
    20. File src = new File(dir,name);
    21. return src.isFile() && name.endsWith(".txt");
    22. }
    23. });
    24. System.out.println(Arrays.toString(arr3));

     listFiles(), listFiles(FileFilter filter),listFiles(FilenameFilter filter)

    1. //1.创建File对象
    2. File f = new File( "D:\\aaa");
    3. //2.需求:打印里面所有的txt文件
    4. File[] arr = f.listFiles();
    5. for (File file : arr){
    6. //file依次表示aaa文件夹里面每一个文件或者文件夹的路径
    7. if(file.isFile() && file.getName().endsWith(".txt")){
    8. System.out.println(file);
    9. }
    10. }
    11. //调用listFiles(FileFilter filter)
    12. File[] arr1 = f.listFiles(new FileFilter() {
    13. @Override
    14. public boolean accept(File pathname) {
    15. return pathname.isFile() && pathname.getName().endsWith(".txt");
    16. }
    17. });
    18. System.out.println(Arrays.toString(arr1)) ;
    19. //调用listFiles(FilenameFilter filter)
    20. File[] arr2 = f.listFiles(new FilenameFilter() {
    21. @Override
    22. public boolean accept(File dir, String name) {
    23. File src = new File(dir, name) ;
    24. return src.isFile() && name.endsWith(".txt");
    25. }
    26. });
    27. System.out.println(Arrays.toString(arr2)) ;

     单个文件夹找文件

    1. //1.创建File对象,战时不考虑子文件夹
    2. File f = new File( "D:\\aaa");
    3. //遍历数组
    4. File[] arr = f.listFiles();
    5. for (File file : arr){
    6. //file依次表示aaa文件夹里面每一个文件或者文件夹的路径
    7. if(file.isFile() && file.getName().endsWith(".txt")){
    8. System.out.println(file);
    9. }
    10. }

    遍历硬盘查找文件

    1. @Test
    2. public void test() throws IOException {
    3. findTxt();
    4. }
    5. //获取系统所有盘符
    6. public static void findTxt(){
    7. File[] arr = File.listRoots();
    8. for (File file : arr) {
    9. findTxt(file);
    10. }
    11. }
    12. //找txt文件
    13. public static void findTxt(File file){
    14. File[] files = file.listFiles();
    15. //遍历数组,依次得到每一个文件或文件夹
    16. if (files != null){
    17. for (File file1 : files) {
    18. //判断是否是文件
    19. if (file1.isFile()){
    20. String name = file.getName();
    21. if (name.endsWith(".txt")){
    22. System.out.println(name);
    23. }
    24. }else {
    25. //如果是文件夹,就使用递归
    26. findTxt(file);
    27. }
    28. }
    29. }
    30. }

    删除文件夹(包括里面的文件)

    1. public void test() throws IOException {
    2. File file = new File("D:\\aaa");
    3. delete(file);
    4. }
    5. //删除aaa文件夹
    6. //file要删除的文件
    7. public static void delete(File file){
    8. File[] files = file.listFiles();
    9. //遍历
    10. for (File file1 : files) {
    11. //判断,如果是文件删除
    12. if (file1.isFile()){
    13. file1.delete();
    14. }else {
    15. //是文件夹就递归
    16. delete(file1);
    17. }
    18. }
    19. //最后在删除自己
    20. file.delete();
    21. }

    统计文件夹大小

    1. public void test() throws IOException {
    2. File file = new File("D:\\aaa");
    3. long len = getLen(file);
    4. System.out.println(len);
    5. }
    6. //统计文件夹大小
    7. public static long getLen(File file){
    8. //定义变量进行累加
    9. long len = 0;
    10. File[] files = file.listFiles();
    11. //遍历数组
    12. for (File file1 : files) {
    13. //判断是否位文件
    14. if (file1.isFile()){
    15. //文件大小进行累加
    16. len = len + file1.length();
    17. }else {
    18. //如果是文件夹就递归
    19. len = len + getLen(file1);
    20. }
    21. }
    22. return len;
    23. }

    统计各种文件数量

    1. public void test() throws IOException {
    2. File file = new File("D:\\aaa");
    3. Map<String, Integer> count = getCount(file);
    4. System.out.println(count);
    5. }
    6. //统计文件夹大小
    7. public static Map<String,Integer> getCount(File file){
    8. //定义集合用来统计
    9. Map<String,Integer> map = new HashMap();
    10. File[] files = file.listFiles();
    11. //遍历数组
    12. for (File file1 : files) {
    13. //判断,如果是文件统计
    14. if (file1.isFile()){
    15. String name = file1.getName();
    16. String[] arr = name.split("\\.");
    17. if (arr.length >= 2){
    18. String endName = arr[arr.length - 1];
    19. if (map.containsKey(endName)){
    20. //存在
    21. int count = map.get(endName);
    22. count++;
    23. map.put(endName,count);
    24. }else {
    25. //不存在
    26. map.put(endName,1);
    27. }
    28. }
    29. }else {
    30. //判断,如果是文件夹,递归
    31. //sonMap里面是子文件中每一种文件的个数
    32. Map<String,Integer> sonMap = getCount(file1);
    33. //遍历sonMap把里面的值累加到map中
    34. Set<Map.Entry<String,Integer>> entries = sonMap.entrySet();
    35. for (Map.Entry<String, Integer> entry : entries) {
    36. String key = entry.getKey();
    37. int value = entry.getValue();
    38. if (map.containsKey(key)) {
    39. //存在
    40. int count = map.get(key);
    41. count = count + value;
    42. map.put(key,count);
    43. }else {
    44. //不存在
    45. map.put(key,value);
    46. }
    47. }
    48. }
    49. }
    50. return map;
    51. }

  • 相关阅读:
    java计算机毕业设计校园环境保护监督系统源代码+系统+数据库+lw文档
    RSA网络安全密码学?
    小游戏sdk对接,提高用户黏度
    使用python爬虫语言调用有道翻译实现英中互译(2023实现)
    基于​Segment-and-Track Anything与ProPainter实现视频一键目标移除与一键祛除水印
    idea 集成 git 后使用的常用命令
    国密SSL证书保障网站安全
    架构重构技巧
    如何修改rpm包
    k8s--基础--25.3--Helm--常用命令和常见错误
  • 原文地址:https://blog.csdn.net/qi341500/article/details/128155469