Java常用类--File类讲解

Posted CodeJiao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java常用类--File类讲解相关的知识,希望对你有一定的参考价值。

1. Java之I/O流(File类)

java.io.File类

java把电脑中的文件和文件夹(目录)封装为了一个File类,
我们可以使用File类对文件和文件夹进行操作

1.1 我们可以File类的方法:

  1. 创建一个文件/文件夹
  2. 删除文件/文件夹
  3. 获取文件/文件夹
  4. 判断文件/文件夹是否存在
  5. 对文件夹进行遍历
  6. 获取文件的大小

注意:File类是一个与系统无关的类,任何的操作系统都可以使用这个类中的方法

1.2 File类的字段

Modifier and TypeField and Description
static StringpathSeparator 与系统相关的路径分隔符字符,为方便起见,表示为字符串。
static charpathSeparatorChar 与系统相关的路径分隔符。
static Stringseparator 与系统相关的默认名称 - 分隔符字符,以方便的方式表示为字符串。
static charseparatorChar 与系统相关的默认名称分隔符。

代码验证:

 public static void main(String[] args) 
        /*
            static String pathSeparator 与系统有关的路径分隔符,为了方便,它被表示为一个字符串。
            static char pathSeparatorChar 与系统有关的路径分隔符。

            static String separator 与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。
            static char separatorChar 与系统有关的默认名称分隔符。

            操作路径:路径不能写死了
            C:\\develop\\a\\a.txt  windows
            C:/develop/a/a.txt  linux
            "C:"+File.separator+"develop"+File.separator+"a"+File.separator+"a.txt"
         */
        String pathSeparator = File.pathSeparator;
        System.out.println(pathSeparator);//路径分隔符 windows:分号;  linux:冒号:

        String separator = File.separator;
        System.out.println(separator);// 文件名称分隔符 windows:反斜杠\\  linux:正斜杠/
    

运行结果:

1.3 相对路径和绝对路径:

绝对路径: 是一个完整的路径
    以盘符(C:,D:)开始的路径
        c:\\\\a.txt
        C:\\\\Users\\JavaCodes\\\\File\\\\Projects\\\\123.txt
        D:\\\\demo\\\\b.txt
        
相对路径: 是一个简化的路径
    相对指的是相对于当前项目的根目录(C:\\\\Users\\JavaCodes\\\\File\\\\Projects)
    如果使用当前项目的根目录,路径可以简化书写
    C:\\\\Users\\JavaCodes\\\\File\\\\Projects\\\\123.txt-->简化为: 123.txt(可以省略项目的根目录
注意:
    1.路径是不区分大小写
    2.路径中的文件名称分隔符windows使用反斜杠,反斜杠是转义字符,两个反斜杠代表一个普通的反斜杠

1.4 File类的构造方法

1.4.1 File(String pathname)

File(String pathname) 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。

参数:
String pathname:字符串的路径名称
路径可以是以文件结尾,也可以是以文件夹结尾
路径可以是相对路径,也可以是绝对路径
路径可以是存在,也可以是不存在
创建File对象,只是把字符串路径封装为File对象,不考虑路径的真假情况   

测试代码:

public static void main(String[] args) 
    show01();

private static void show01() 
        File f1 = new File("E:\\\\IDEACode\\\\File\\\\src\\\\a.txt");
        System.out.println(f1);//重写了Object类的toString方法 E:\\IDEACode\\File\\src\\a.txt

        File f2 = new File("E:\\\\IDEACode\\\\File\\\\src");
        System.out.println(f2);//E:\\IDEACode\\File\\src

        File f3 = new File("b.txt");
        System.out.println(f3);//b.txt
    

运行结果:

1.4.2 File(String parent, String child)

根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。

    参数:把路径分成了两部分
        String parent:父路径
        String child:子路径
    好处:
        父路径和子路径,可以单独书写,使用起来非常灵活;
        父路径和子路径都可以变化

测试代码:

public static void main(String[] args) 
        show02("c:\\\\", "a.txt");//c:\\a.txt
        show02("d:\\\\", "a.txt");//d:\\a.txt
    
private static void show02(String parent, String child) 
        File file = new File(parent,child);
        System.out.println(file);//c:\\a.txt
    

运行结果:

1.4.3 File(File parent, String child)

  根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
 参数:把路径分成了两部分
    File parent:父路径
    String child:子路径
好处:
     父路径和子路径,可以单独书写,使用起来非常灵活;
     父路径和子路径都可以变化
     父路径是File类型,可以使用File的方法对路径进行一些操作,
     再使用路径创建对象
public static void main(String[] args) 
        show03();
    

private static void show03() 
        File parent = new File("c:\\\\");
        File file = new File(parent, "hello.java");
        System.out.println(file);//c:\\hello.java
    

运行结果:

1.5 常用方法

1.5.1 获取功能的方法

  • public String getAbsolutePath() :返回此File的绝对路径名字符串。
  • public String getPath():将此File转换为路径名字符串。
  • public String getName() :返回由此File表示的文件或目录的名称。

  • public long length() :返回由此File表示的文件的长度。

public String getAbsolutePath()
测试代码:

 /*
        public String getAbsolutePath() :返回此File的绝对路径名字符串。
        获取的构造方法中传递的路径
        无论路径是绝对的还是相对的,getAbsolutePath方法返回的都是绝对路径
     */
    public static void main(String[] args) 
        show01();
    

    private static void show01() 
        File f1 = new File("E:\\\\IDEACode\\\\File\\\\a.txt");
        String absolutePath1 = f1.getAbsolutePath();
        System.out.println(absolutePath1);//E:\\IDEACode\\File\\a.txt

        File f2 = new File("a.txt");
        String absolutePath2 = f2.getAbsolutePath();
        System.out.println(absolutePath2);//E:\\IDEACode\\File\\src\\a.txt
    

运行结果:


public String getPath()
代码验证:

 /*
        public String getPath() :将此File转换为路径名字符串。
        获取的构造方法中传递的路径

        toString方法调用的就是getPath方法
        源码:
            public String toString() 
                return getPath();
            
     */
    public static void main(String[] args) 
        show02();
    
    private static void show02() 
        File f1 = new File("E:\\\\IDEACode\\\\File\\\\a.txt");
        File f2 = new File("a.txt");
        String path1 = f1.getPath();
        System.out.println(path1);//E:\\IDEACode\\File\\a.txt
        String path2 = f2.getPath();
        System.out.println(path2);//a.txt
    

运行结果:


public String getName()
代码验证:

    /*
        public String getName()  :返回由此File表示的文件或目录的名称。
        获取的就是构造方法传递路径的结尾部分(文件/文件夹)
     */
    public static void main(String[] args) 
        show03();
    

    private static void show03() 
        File f1 = new File("E:\\\\IDEACode\\\\File\\\\a.txt");
        File f2 = new File("E:\\\\IDEACode\\\\File");
        String name1 = f1.getName();
        System.out.println(name1);//a.txt
        String name2 = f2.getName();
        System.out.println(name2);//File
    

运行结果:


public long length()
代码验证:

    /*
        public long length()  :返回由此File表示的文件的长度。
        获取的是构造方法指定的文件的大小,以字节为单位
        注意:
            文件夹是没有大小概念的,不能获取文件夹的大小
            如果构造方法中给出的路径不存在,那么length方法返回0
     */
    public static void main(String[] args) 
        show04();
    

    private static void show04() 
        File f1 = new File("C:\\\\Users\\\\Administrator\\\\Pictures\\\\Saved Pictures\\\\1.jpg");
        long l1 = f1.length();
        System.out.println(l1);
        File f2 = new File("E:\\\\IDEACode\\\\File\\\\src");
        System.out.println(f2.length());//0 文件夹没有大小概念的
    

运行结果:


1.5.2 判断功能的方法

  • public boolean exists() :此File表示的文件或目录是否实际存在。
  • public boolean isDirectory() :此File表示的是否为目录。
  • public boolean isFile() :此File表示的是否为文件。

1.5.3 创建删除功能的方法

  • public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
  • public boolean delete() :删除由此File表示的文件或目录。
  • public boolean mkdir() :创建由此File表示的目录。
  • public boolean mkdirs() :创建由此File表示的目录,包括任何必需但不存在的父目录。

public boolean createNewFile() :

当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
创建文件的路径和名称在构造方法中给出(构造方法的参数)
返回值:布尔值
true:文件不存在,创建文件,返回true
false:文件存在,不会创建,返回false
注意:
1.此方法只能创建文件,不能创建文件夹
2.创建文件的路径必须存在,否则会抛出异常

代码验证:

    public static void main(String[] args) throws IOException 
        show01();
    

    private static void show01() throws IOException 
        File f1 = new File("E:\\\\IDEACode\\\\File\\\\src\\\\1.txt");
        boolean b1 = f1.createNewFile();
        System.out.println("b1:" + b1);

        File f2 = new File("2.txt");
        System.out.println(f2.createNewFile());
    

运行结果:


public boolean mkdir() :创建单级空文件夹

既可以创建单级空文件夹,也可以创建多级文件夹
   创建文件夹的路径和名称在构造方法中给出(构造方法的参数)
    返回值:布尔值
        true:文件夹不存在,创建文件夹,返回true
        false:文件夹存在,不会创建,返回false;
        构造方法中给出的路径不存在返回false
    注意:
        1.此方法只能创建文件夹,不能创建文件
        代码验证:
    public static void main(String[] args) throws IOException 
        show02();
    

    private static void show02() 
        File f1 = new File("E:\\\\IDEACode\\\\File\\\\src\\\\aaa");
        boolean b1 = f1.mkdir();
        System.out.println("b1:" + b1);

        File f2 = new File("E:\\\\IDEACode\\\\File\\\\src\\\\aaa\\\\bbb\\\\ccc\\\\ddd");
        boolean b2 = f2.mkdirs();
        System.out.println("b2:" + b2);
    

运行结果:


public boolean delete()
删除由此File表示的文件或目录。

    此方法,可以删除构造方法路径中给出的文件/文件夹
    返回值:布尔值
        true:文件/文件夹删除成功,返回true
        false:文件夹中有内容,不会删除返回false;
        构造方法中路径不存在false
    注意:
        delete方法是直接在硬盘删除文件/文件夹,不走回收站,删除要谨慎

代码验证:

   public static void main(String[] args) throws IOException 
        show03();
    

    private static void show03() 
        File f1 = new File("E:\\\\IDEACode\\\\File\\\\src\\\\1.txt");
        boolean b1 = f1.delete();
        System.out.println("b1:" + b1);

        File f2 = new File("E:\\\\IDEACode\\\\File\\\\src\\\\aaa\\\\bbb\\\\ccc\\\\ddd");
        System.out.println(f2.delete());
    

运行结果:


1.6 目录的遍历

  • public String[] list() :返回一个String数组,表示该File目录中的所有子文件或目录。

  • public File[] listFiles() :返回一个File数组,表示该File目录中的所有的子文件或目录。
    File类遍历(文件夹)目录功能

    • public String[] list() :返回一个String数组,表示该File目录中的所有子文件或目录。
    • public File[] listFiles() :返回一个File数组,表示该File目录中的所有的子文件或目录。

注意:
list方法和listFiles方法遍历的是构造方法中给出的目录
如果构造方法中给出的目录的路径不存在,会抛出空指针异常
如果构造方法中给出的路径不是一个目录,也会抛出空指针异常  
代码验证:
   public static void main(String[] args) 
        show01();
        System.out.println("---------------------");
        show02();
    

    /*
          public String[] list() :返回一个String数组,表示该File目录中的所有子文件或目录。
          遍历构造方法中给出的目录,会获取目录中所有文件/文件夹的名称,把获取到的多个名称存储到一个String类型的数组中
       */
    private static void show01() 
        File file = new File("E:\\\\IDEACode\\\\File\\\\src");
        String[] arr = file.list();
        for (String fileName : arr) 
            System.out.println(fileName);
        
    

    /*
        public File[] listFiles() :返回一个File数组,表示该File目录中的所有的子文件或目录。
        遍历构造方法中给出的目录,会获取目录中所有的文件/文件夹,把文件/文件夹封装为File对象,多个File对象存储到File数组中
     */
    private static void show02() 
        File file = new File("E:\\\\IDEACode\\\\File\\\\src");
        File[] files = file.listFiles();
        for (File f : files) 
            System.out.println(f);
        
    

运行结果:



以上是关于Java常用类--File类讲解的主要内容,如果未能解决你的问题,请参考以下文章

java File类常用方法

java常用的File类方法

Java学习笔记6.3.1 文件操作 - File类

Java学习笔记6.3.1 文件操作 - File类

16个IO常用流

java中FILE类常用API介绍