zoukankan      html  css  js  c++  java
  • 【JAVA基础】21 File类

    1. File类的概述和构造方法

    • File类的概述

      • File更应该叫做一个路径

        • 文件路径或者文件夹路径

        • 路径分为绝对路径和相对路径

          • 绝对路径是一个固定的路径,从盘符开始

          • 相对路径相对于某个位置,在eclipse下是指当前项目下,在dos下

      • 查看API指的是当前路径

      • 文件和目录路径名的抽象表示形式

    • 构造方法

      • File(String pathname):根据一个路径得到File对象

      • File(String parent, String child):根据一个目录和一个子文件/目录得到File对象

      • File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对象

    • 案例演示

      • File类的构造方法

      • package com.heima.file;
        
        import java.io.File;
        
        public class Demo1_File {
        
            /**
             * @param args
             */
            public static void main(String[] args) {
                File file1 = new File("D:\JAVA\01 JAVA基础\day19\day19\code\day19\src\com\heima\file\Demo1_File.java");
                System.out.println(file1.exists());
                
                File file2 = new File("xxx.txt");
                System.out.println(file2.exists());
                
                File Parent = new File("D:\JAVA\01 JAVA基础\day19\day19\code\day19\src\com\heima\file");
                String child = "Demo1_File.java";
                File file3 = new File(Parent, child);
                System.out.println(file3.exists());
                
                String parent = "D:\JAVA\01 JAVA基础\day19\day19\code\day19\src\com\heima\file";
                String child2 = "Demo1_File.java";
                File file4 = new File(Parent, child2);
                System.out.println(file4.exists());
            }
        
        }
        View Code

    2. File类的创建功能

    • 创建功能

      • public boolean createNewFile():创建文件,如果存在这样的文件,就不创建了

      • public boolean mkdir():创建文件夹,如果存在这样的文件夹,就不创建了

      • public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来

    • 案例演示

      • File类的创建功能

      • package com.heima.file;
        
        import java.io.File;
        import java.io.IOException;
        
        public class Demo2_File {
        
            /**
            public boolean createNewFile():创建文件,如果存在这样的文件,就不创建了
            public boolean mkdir():创建文件夹,如果存在这样的文件夹,就不创建了
            public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来
             * @throws IOException 
             */
            public static void main(String[] args) throws IOException {
                File file1 = new File("test");
                System.out.println(file1.mkdir());
                
                File file2 = new File("test\a\b\c");
                System.out.println(file2.mkdirs());
                
                File file3 = new File("test\a\b\c\t1.txt");
                System.out.println(file3.createNewFile());  // 需要ctrl+1,throws IOException
            }
        
        }
        View Code
      • 注意事项:

        • 如果你创建文件或者文件夹忘了写盘符路径,那么,默认在项目路径下。

     

    3. File类的重命名和删除功能

    • 重命名和删除功能

      • public boolean renameTo(File dest):把文件重命名为指定的文件路径

      • public boolean delete():删除文件或者文件夹

    • 重命名注意事项

      • 如果路径名相同,就是改名。

      • 如果路径名不同,就是改名并剪切。

    • 删除注意事项:

      • Java中的删除不走回收站。

      • 要删除一个文件夹,请注意该文件夹内不能包含文件或者文件夹

    • package com.heima.file;
      
      import java.io.File;
      import java.io.IOException;
      
      public class Demo3_File {
      
          /**
           重命名和删除功能
               public boolean renameTo(File dest):把文件重命名为指定的文件路径
               public boolean delete():删除文件或者文件夹
           * @throws IOException 
           */
          public static void main(String[] args) throws IOException {
      //        demo1(); 
              
              File file1 = new File("a/b/c/d");
              File file2 = new File("a/b/c/d/test.txt");
              if(!file1.exists()) {
                  file1.mkdir();
              } 
              if (!file2.exists()) {
                  file2.mkdirs();
              }
              System.out.println(file1.exists());
              System.out.println(file1.delete()); // Java中的删除不走回收站。
                          // 要删除一个文件夹,请注意该文件夹内不能包含文件或者文件夹
          }
      
          public static void demo1() throws IOException {
              File file1 = new File("xxx.txt");
              File file2 = new File("ooo.txt");
              if (!file1.exists()) {
                  file1.createNewFile();
              } else {
                  file1.delete();
                  file1.createNewFile();
              }
              
              if (file2.exists() && file1.exists()) {
                  file2.delete();
                  System.out.println(file1.renameTo(file2));
              }
          }
      
      }
      View Code

     

    4. File类的判断功能

    • 判断功能

      • public boolean isDirectory():判断是否是目录

      • public boolean isFile():判断是否是文件

      • public boolean exists():判断是否存在

      • public boolean canRead():判断是否可读

      • public boolean canWrite():判断是否可写

      • public boolean isHidden():判断是否隐藏

    • 案例演示

      • File类的判断功能

      • package com.heima.file;
        
        import java.io.File;
        
        public class Demo4_File {
        
            /**
            public boolean isDirectory():判断是否是目录
            public boolean isFile():判断是否是文件
            public boolean exists():判断是否存在
            public boolean canRead():判断是否可读
            public boolean canWrite():判断是否可写
            public boolean isHidden():判断是否隐藏
             */
            public static void main(String[] args) {
                File dir1 = new File("a");
                File file1 = new File("ooo.txt");
                System.out.println("查看文件file1和目录dir1是否是文件和目录");
                System.out.println(dir1.isDirectory());  // true
                System.out.println(file1.isFile());   // true
                
                System.out.println("查看文件file1是否可读可写");
                System.out.println(file1.canRead());   // true
                System.out.println(file1.canWrite());  // true
                
                System.out.println("设置文件file1和目录dir1是否可读可写");
                file1.setReadable(false);  //在windows系统中,认为所有文件都是可读的,所以设置无效
                System.out.println(file1.canRead()); // true
                file1.setWritable(false);  //在windows系统中,可以设置文件是否可写
                System.out.println(file1.canWrite()); // false
                dir1.setWritable(false);
                System.out.println(dir1.canWrite()); // true 
                
                System.out.println("查看目录是否可隐藏");
                System.out.println(dir1.isHidden()); //false
            }
        
        }
        View Code

    5. File类的获取功能

    • 获取功能

      • public String getAbsolutePath():获取绝对路径

      • public String getPath():获取路径

      • public String getName():获取名称

      • public long length():获取长度。字节数

      • public long lastModified():获取最后一次的修改时间,毫秒值

      • public String[] list():获取指定目录下的所有文件或者文件夹的名称数组

      • public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组

    • 案例演示

      • File类的获取功能

      • package com.heima.file;
        
        import java.io.File;
        import java.io.IOException;
        import java.text.SimpleDateFormat;
        import java.util.Date;
        
        public class Demo5_File {
        
            /**
            public String getAbsolutePath():获取绝对路径
            public String getPath():获取路径
            public String getName():获取名称
            public long length():获取长度。字节数
            public long lastModified():获取最后一次的修改时间,毫秒值
            public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
            public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组
             * @throws IOException 
             */
            public static void main(String[] args) throws IOException {
                File file1 = new File("a/b/c/test");
                file1.mkdirs();
                for (int i = 0; i < 10; i++) {
                    File file_i = new File("a/b/c/test/" + i);
                    file_i.createNewFile();
                }
                System.out.println("获取绝对路径:" + file1.getAbsolutePath()); // 获取绝对路径:D:JAVAcoursesday19ac	est
                System.out.println("获取路径:" + file1.getPath());  // 获取路径:ac	est
                System.out.println("获取名称:" + file1.getName());  // 获取名称:test
                System.out.println("获取长度,字节数:" + file1.length());  //获取长度,字节数:4096
                
                System.out.println("获取最后一次的修改时间,毫秒值:" + file1.lastModified()); // 获取最后一次的修改时间,毫秒值:1592288698496
                Date d = new Date(file1.lastModified()); 
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:MM:SS");
                System.out.println(sdf.format(d));  // 2020-24-16 14:06:496
                
                System.out.println("获取指定目录下的所有文件或者文件夹的名称数组:");
                String[] arr_s = file1.list();
                for (String s : arr_s) {
                    System.out.println(s); // 0 1 2 3 .. 9
                }
            
                
                System.out.println("获取指定目录下的所有文件或者文件夹的File数组:");
                File[] listFiles = file1.listFiles();
                for (File file : listFiles) {
                    System.out.println(file);
                }
                /*
                    ac	est
                    ac	est1
                    ac	est2
                    ac	est3
                    ac	est4
                    ac	est5
                    ac	est6
                    ac	est7
                    ac	est8
                    ac	est9
                 */
            }
        
        }
        View Code

    6. 输出指定目录下指定后缀的文件名

    • 案例演示

      • 需求:判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称

      • package com.heima.file;
        
        import java.io.File;
        
        public class Demo6_File {
        
            /**
             需求:判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称
             */
            public static void main(String[] args) {
        //        demo1();
                
                File dir = new File("E:\");
                File[] subfiles = dir.listFiles(); // 获取E盘下所有的文件或文件夹对象
                for (File file : subfiles) {
                    if(file.isFile() && file.getName().endsWith(".jpg")) {
                        System.out.println(file);
                    } 
                }
            }
        
            public static void demo1() {
                File dir = new File("E:\");
                String[] arr = dir.list(); // 获取E盘下的所有文件和文件夹
                for (String string : arr) {
                    if(string.endsWith(".jpg")) {
                        System.out.println(string);
                    } 
                }
            }
        
        }
        View Code

          

    7. 文件名称过滤器的概述及使用

    • 文件名称过滤器的概述

      • public String[] list(FilenameFilter filter)

      • public File[] listFiles(FileFilter filter)

    • 文件名称过滤器的使用

      • 需求:判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称

      • package com.heima.file;
        
        import java.io.File;
        import java.io.FilenameFilter;
        
        public class Demo6_File {
        
            /**
             需求:判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称
             */
            public static void main(String[] args) {
                File dir = new File("E:\");
                
                String[] arr = dir.list(new FilenameFilter() {
                    
                    @Override
                    public boolean accept(File dir, String name) {
                        File file = new File(dir,name);
                        return file.isFile() && file.getName().endsWith(".jpg");
                    }
                });
                
                for (String string : arr) {
                    System.out.println(string);
                }
            }
        
        }
        View Code
    • 源码分析

      • 带文件名称过滤器的list()方法的源码

      •  public String[] list(FilenameFilter filter) {
                String names[] = list();   // 获取文件名称数组
                if ((names == null) || (filter == null)) {
                    return names;    // 判断null值情况
                }
                List<String> v = new ArrayList<>();   // 生成ArrayList数组列表,用于存储符合文件过滤器条件的文件名名称
                for (int i = 0 ; i < names.length ; i++) {
                    if (filter.accept(this, names[i])) {  // 调用文件过滤器的accept的方法
                        v.add(names[i]);
                    }
                }
                return v.toArray(new String[v.size()]); // 将输出结果转换为数组
            }
        View Code

    8. File类(递归)

    递归,就是方法自己调用自己。

    • 5的阶乘

      • package com.heima.test;
        
        public class Test4 {
        
            /**
            5的阶乘 1 * 2 * 3 * 4 * 5
            分析:
             5! = 5 * (4!)
                = 5 * 4 * (3!)
                = 5 * 4 * 3 * (2!)
                = 5 * 4 * 3 * 2 * (1!)
             */
            public static void main(String[] args) {
                int res = fun(5);
                System.out.println(res);
            }
            
            public static int fun(int num) {
                if(num == 1) {
                    return num;
                } else {
                    return num * fun(num - 1);
                }
            }
        }
        View Code
      • 所有方法都在栈内,直到fun(1)执行完,开始逐步弹栈。
      • 递归的缺点:如果调用的次数过多,容易出现栈内存溢出
      • 递归的优点:不用知道循环的次数
      • 问题:构造方法是否可以递归调用?
        • 不能
      • 问题:递归调用是否必须有返回值?
        • 不一定,可以有,也可以没有
        • 如:一个给定文件夹路径下的所有的.java文件名
    • 需求:从键盘输入接收一个文件夹路径,打印出该文件夹下所有的.java文件名

      • package com.heima.test;
        
        import java.io.File;
        import java.util.Scanner;
        
        public class Test5 {
        
            /**
             需求:
                 从键盘输入接收一个文件夹路径,打印出该文件夹下所有的.java文件名
             */
            public static void main(String[] args) {
                // 1. 创建键盘录入对象,对路径进行判断,是否为文件夹,文件,是否存在
                File dir = getDir();
                
                
                // 2. 获取所有该文件夹下的所有.java的文件名
                // 获取到该文件夹路径下的所有的文件和文件夹,存储在File数组中
                // 遍历数组,对每一个文件或文件夹做判断
                //                     如果是文件,并且后缀是".java"的就打印输出;
                //                  如果是文件夹,就递归调用。
                printJavaFile(dir);
            }
            
            public static File getDir() {
                Scanner sc = new Scanner(System.in);
                System.out.println("请输入目标文件夹:");
                while(true) {
                    String line = sc.nextLine();
                    File dir = new File(line);
                    if(!dir.exists()) {
                        System.out.println("您录入的文件夹路径不存在,请重新录入:");
                    } else if(dir.isFile()) {
                        System.out.println("您录入的是文件路径,请重新录入文件夹路径:");
                    } else {
                        return dir;
                    }
                }
            }
            
            public static void printJavaFile(File dir) {
                // 获取到该文件夹路径下的所有的文件和文件夹,存储在File数组中
                File[] subFiles = dir.listFiles();
                for (File subFile : subFiles) {
                    if(subFile.isFile() && subFile.getName().endsWith(".java")){
                        System.out.println(subFile);
                    } else if (subFile.isDirectory()){
                        printJavaFile(subFile);
                    }
                }
            }
        }
        View Code

     

  • 相关阅读:
    idea项目maven配置
    IDEA配置maven项目启动
    IDEA导入本地项目教程
    EasyUi前端js禁止短时间内多次点击按钮方法
    EasyUi的form验证框位置修改
    div中的div如何居中
    Java导出Excel使用POI之SXSSFWorkbook方式
    java.lang.NoSuchMethodError
    eclipse导出项目时报错:problems were encountered during export
    直线检测方法—LSD论文翻译
  • 原文地址:https://www.cnblogs.com/zoe233/p/13036452.html
Copyright © 2011-2022 走看看