• JavaIO流01:File类


    一、File类的使用

    • java.io.File类:文件和文件目录路径的抽象表示形式,与平台无关
    • File能新建、删除、重命名文件和目录,但File不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流。
    • 想要在Java程序中表示一个真实存在的文件或目录,那么必须有一个File对象,但是Java程序中的一个File对象,可能没有一个真实存在的文件或目录。
    • 后续File类的对象常会作为参数传递到流的构造器中,指明读取或写入的“终点”。

    常用构造器

    • public File(String pathname)
      以pathname为路径创建File对象,可以是绝对路径或者相对路径,如果parhname是相对路径,则默认的当前路径在系统属性user.dir中存储。
        绝对路径:是一个固定的路径,从盘符开始
        相对路径:是相对于某个位置开始
      说明:IDEA中,如果开发使用JUnit中的单元测试方法测试,相对路径即为当前Module下;如果使用main()测试,相对路径即为当前Project下。Eclipse中,不管使用单元测试方法还是使用main()测试,相对路径都是当前的Project下。
    • public File(String parent, String child)
      以parent为父路径,child为子路径创建File对象。
    • public File(File parent, String child)
      根据一个父File对象和子文件路径创建File对象。
    package com.sggIO;
    
    /*
    File类的使用
    1. File类的一个对象,代表一个文件或一个文件目录(俗称:文件夹)
    2. File类声明在java.io包下
    */
    
    import org.junit.Test;
    
    import java.io.File;
    
    public class FileTest {
        /*
        1. 如果创建File类的实例
            File(String filePath)
            File(String parentPath, String childPath)
            File(File parentFile, String childPath)
    
        2.
        相对路径:相较于某个路径下,指明的路径。
        绝对路径:包含盘符在内的文件或文件目录的路径。
    
        3. 路径分隔符
        windows:\\
        unix:/
         */
        @Test
        public void test1() {
            //构造器1
            File file1 = new File("Hello.txt"); //相对于当前module
            File file2 = new File("D:\\Java_study\\IdeaProjects\\JavaSE\\JavaSEstudy\\src\\com\\sggIO\\hi.txt");
    
            System.out.println(file1); //Hello.txt
            System.out.println(file2); //D:\Java_study\IdeaProjects\JavaSE\JavaSEstudy\src\com\sggIO\hi.txt
    
            //构造器2
            File file3 = new File("D:\\Java_study", "Liang");
            System.out.println(file3); //D:\Java_study\Liang
    
            //构造器3
            File file4 = new File(file3, "hello.txt");
            System.out.println(file4); //D:\Java_study\Liang\hello.txt
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    二、File类的常用方法

    File类的获取功能

    public String getAbsolutePath():获取绝对路径
    public String getPath():获取路径
    public String getName():获取名称
    public String getParent():获取上层文件目录路径。若无,返回null
    public long length():获取文件长度(即:字节数)。不能获取目录的长度
    public long lastModified():获取最后一次修改的时间,毫秒值

    如下的两个方法适用于文件目录:
    public String[ ] list():获取指定目录下的所有文件或者文件目录的名称数组
    public File[ ] listFiles():获取指定目录下的所有文件或者文件目录的File数组

        public void test2() {
            File file1 = new File("hello.txt");
            File file2 = new File("D:\\Java_study\\hi.txt");
            //硬盘中存在的文件
            System.out.println(file1.getAbsolutePath()); //D:\Java_study\IdeaProjects\JavaSE\JavaSEstudy\hello.txt
            System.out.println(file1.getPath()); //hello.txt
            System.out.println(file1.getName()); //hello.txt
            System.out.println(file1.getParent()); //null
            System.out.println(file1.length()); //10
            System.out.println(new Date(file1.lastModified())); //Sun Aug 07 18:19:46 KST 2022
    
            System.out.println();
            //硬盘中不存在的文件
            System.out.println(file2.getAbsolutePath()); //D:\Java_study\hi.txt
            System.out.println(file2.getPath()); //D:\Java_study\hi.txt
            System.out.println(file2.getName()); //hi.txt
            System.out.println(file2.getParent()); //D:\Java_study
            System.out.println(file2.length()); //0
            System.out.println(file2.lastModified()); //0
        }
    
        @Test
        public void test3() {
            File file = new File("D:\\Java_study\\IdeaProjects\\JavaSE\\JavaSEstudy");
    
            String[] list = file.list();
            for (String s : list) {
                System.out.println(s);
            }
    
            File[] files = file.listFiles();
            for (File f : files) {
                System.out.println(f);
            }
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    File类的重命名功能

    public boolean renameTo(File dest):把文件重命名为指定的文件路径
    比如:file1.renameTo(file2)为例:
        要想保证返回true,需要file1在硬盘中是存在的,且file2在硬盘中是不存在的。

        public void test4() {
            File file1 = new File("hello.txt");
            File file2 = new File("D:\\Java_study\\IdeaProjects\\hi.txt");
    
            boolean renameTo = file1.renameTo(file2);
            System.out.println(renameTo);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    File类的判断功能

    public boolean isDirectory():判断是否是文件目录
    public boolean isFile():判断是否是文件
    public boolean exists():判断是否存在
    public boolean canRead():判断是否可读
    public boolean canWrite():判断是否可写
    public boolean isHidden():判断是否隐藏

        public void test5() {
        	//文件
            File file1 = new File("hello.txt");
            System.out.println(file1.isDirectory()); //false
            System.out.println(file1.isFile()); //true
            System.out.println(file1.exists()); //true
            System.out.println(file1.canRead()); //true
            System.out.println(file1.canWrite()); //true
            System.out.println(file1.isHidden()); //false
    
            System.out.println();
    
    		//文件夹
            File file2 = new File("D:\\Java_study");
            System.out.println(file2.isDirectory()); //true
            System.out.println(file2.isFile()); //false
            System.out.println(file2.exists()); //true
            System.out.println(file2.canRead()); //true
            System.out.println(file2.canWrite()); //true
            System.out.println(file2.isHidden()); //false
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    File类的创建功能

    public boolean createNewFile():创建文件。若文件存在,则不创建,返回false。
    public boolean mkdir():创建文件目录。若此文件目录存在,则不创建;若此文件目录的上层目录不存在,也不创建。
    public boolean mkdirs():创建文件目录。如果上层文件目录不存在,一并创建。
    注意:如果你创建文件或者文件目录没有写盘符路径,那么,默认在项目路径下。

    File类的删除功能

    public boolean delete():删除文件或者文件夹
    注意:Java中的删除不走回收站。要删除一个文件目录,请注意该文件目录内不能包含文件或者文件目录。

        public void test6() throws IOException {
            //文件的创建
            File file1 = new File("hi.txt");
            if (!file1.exists()) {
                file1.createNewFile();
                System.out.println("创建成功");
            }else { //文件存在
                file1.delete();
                System.out.println("删除成功");
            }
        }
    
        //文件目录的创建
        @Test
        public void test7() {
            File file1 = new File("D:\\Java_study\\io1\\io3");
    
            boolean mkdir1 = file1.mkdir();
            if (mkdir1) {
                System.out.println("创建成功1");
            }
    
            File file2 = new File("D:\\Java_study\\io1\\io4");
    
            boolean mkdir2 = file2.mkdirs();
            if (mkdir2) {
                System.out.println("创建成功2"); //创建成功2
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    三、File类的课后练习

    
    public class FileDemo {
    
        @Test
        public void test1() throws IOException {
            File file = new File("D:\\Java_study\\io1\\hello.txt") ;
            //创建一个与file同目录下的另外一个文件,文件名为:haha.txt
            File file1 = new File(file.getParent(), "haha.txt");
            boolean newFile = file1.createNewFile();
            if (newFile) {
                System.out.println("创建成功!");
            }
    
            //判断指定目录下是否有后缀名为.txt的文件,如果有,就输出该文件名称。
            File file2 = new File(file.getParent());
            String[] list = file2.list();
            for (int i = 0; i < list.length; i++) {
                if (list[i].endsWith(".txt")) {
                    System.out.println(list[i]);
                }
            }
        }
    
        //遍历指定目录所有文件名称,包括子文件目录中的文件。
        public static void printSubFile(File dir) {
            File[] files = dir.listFiles();
            for (int i = 0; i < files.length; i++) {
                if (files[i].isDirectory()) {
                    printSubFile(files[i]);
                }else {
                    System.out.println(files[i].getName());
                }
            }
        }
    
        public static void main(String[] args) {
            File file = new File("D:\\Java_study");
            printSubFile(file);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
  • 相关阅读:
    Gson - 一个Java序列化/反序列化库
    【二】2D测量 Metrology——set_metrology_object_fuzzy_param()算子
    Multi-Graph Fusion Networks for Urban Region Embedding
    UML测试题(用例图基础b)
    yolov4模型部署流程
    生命周期的使用
    ImmunoChemistry艾美捷基本细胞毒性试验试剂盒测定方案
    “气运”其实是可以改变的,方法也很简单!
    第五章:最新版零基础学习 PYTHON 教程—Python 字符串操作指南(第十节 Python——查找字符串中所有重复的字符)
    【Selenium】提高测试&爬虫效率:Selenium与多线程的完美结合
  • 原文地址:https://blog.csdn.net/m0_61467488/article/details/126202313