File类的介绍和常用方法

1、File类

File类的介绍:

1、File类和四大家族没有关系,所以File类不能完成文件的读和写

2、File对象代表什么? - 文件和目录路径名的抽象表示形式 - 例如: D:\java_study 这是一个File对象 D:\java_study\java_note.txt 这也是一个File对象 - 一个File对象有可能对应的是目录,也可能是文件。 File只是一个路径名的抽象表示形式。

File类构造方法:
常用的有三种:
1、File(String pathname):通过路径名创建一个新 File 实例。

2、File(File parent, String child):根据父目录路径File实例和子目录或文件路径创建一个新 File 实例。

3、File(String parent, String child) :根据父目录路径和子目录或文件路径创建一个新 File 实例。

public class FileDemo1 {
    public static void main(String[] args) throws IOException {
        // 1 File(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的File实例
        File f1 = new File("F:\\a.txt");
        System.out.println(f1); // F:\a.txt

        // 2 File(String parent, String child) 父路径名字符串 和 子路径名字符串
        File f2 = new File("F:\\abc", "a.txt");
        System.out.println(f2); // F:\abc\a.txt

        // 3 File(File parent, String child) 父抽象路径名 和 子路径字符串
        File f3 = new File(new File("F:\\abc\\a"), "a.txt");
        System.out.println(f3); // F:\abc\a\a.txt

        /*错误示范:File类构造函数的本质就是将两个字符串连接起来,不会检验路径是否正确*/
        File f4 = new File(new File("F:\\abc\\x.jpg"), "aa.txt");
        System.out.println(f4); // F:\abc\x.jpg\aa.txt
    }
}

其中的常用方法使用:

getAbsolutePath():获取绝对路径

public class FileTest2 {
    public static void main(String[] args) {
    File f1=new File("D:/aa/hello.txt");//创建了 文件 映射对象
    String absolutePath1 = f1.getAbsolutePath();
    System.out.println("文件的绝对路径"+absolutePath1);//绝对磁盘路径 
   }
​}

getName():返回此对象表示的文件或目录最后一级文件夹名称

public class FileTest2 {
    public static void main(String[] args) {
    File f1=new File("D:/aa/hello.txt");//创建了 文件 映射对象
    String name1 = f1.getName();//获取文件名,即你定位的元素
    System.out.println("文件名称:"+name1);
 }
}

getPath(): 返回File对象所表示的字符串路径

public class FileTest2 {
    public static void main(String[] args) {
    File f1=new File("D:/aa/hello.txt");//创建了 文件 映射对象
    String path1 = f1.getPath();
    System.out.println("文件的路径"+path1);
   }
}

exists(): 判断文件/文件夹是否存在

public class FileTest2 {
    public static void main(String[] args) {
    File f1=new File("D:/aa/hello.txt");//创建了 文件 映射对象
     System.out.println(f1.exists());
   }
}

isDirectory(): 判断此File对象代表的路径表示是不是文件夹,只有File对象代表路径存在且是一个目录时才返回true,否则返回false

public class FileTest2 {
    public static void main(String[] args) {
    File f1=new File("D:/aa/hello.txt");//创建了 文件 映射对象
    System.out.println(f1.isDirectory());
   }
}

isFile():判断此File对象代表的路径是否是一个标准文件,只有File对代表路径存在且是一个标准文件时才返回true,否则返回false

public class FileTest2 {
    public static void main(String[] args) {
    File f1=new File("D:/aa/hello.txt");//创建了 文件 映射对象
    System.out.println(f1.isFile());
  }
}

注意事项:

  • 当调用者不存在时,返回null
  • 当调用者是一个文件时,返回null
  • 当调用者是一个空文件夹时,返回一个长度为0的数组
  • 当调用者是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回
  • 当调用者是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏内容

2、构造方法:

  1. public File(String pathname) : 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
  2. public File(String parent,String child) : 从父路径名字符串和子路径名字符串创建新的 File实例。
  3. public File(File parent,String child) : 从父抽象路径名和子路径名字符串创建新的 File实例。
import java.io.File;
 
public class FileTest2 {
    public static void main(String[] args) {
        //File的构造方法比较灵活,可以根据具体的需要选择使用
        File f1=new File("D:/aa/hello.txt");
        File f2=new File("d:/aa","hello.txt");
        File file=new File("d:/aa");
        File f3=new File(file,"hello.txt");
    }
}

普通方法(常用)

1.当只是创建了文件对象时,可以调用方法在具体的路径下面创建文件或者文件夹。

  • boolean mkdir() 在硬盘创建一个文件夹对象。
  • boolean createNewFile() 在硬盘创建一个文件对象。
import java.io.File;
import java.io.IOException;
 
public class FileTest {
    public static void main(String[] args) throws IOException {
        File f1=new File("d:/aa/bb/cc");
        File f2=new File(f1,"a.txt");
 
        //mkdir创建单个文件夹,mkdirs自动不全所有的月灵结构,推荐使用mkdirs
        f1.mkdirs();
 
        //1.月录结构不存在,程序异常:2.目录结构存在且文件不存在则创建空文件:3.目录结构存在且文件存在不做任何操作
        f2.createNewFile();
 
    }
}

创建和删除功能方法

  • boolean createNewFile() 当且仅当当前该名称文件尚不存在时,创建一个新的文件
  • boolean delete() 删除由此File表示的文件或目录,若要删除的是目录且目录里面有内容则
  • 删除

public boolean delete​() // 删除由此抽象路径名表示的文件或目录

注意事项:

  • delete方法直接删除不走回收站
  • 如果删除的是一个文件,直接删除
  • 如果删除的是一个文件夹,需要先删除文件夹中的内容,最后才能删除文件夹

 3、相对路径和绝对路径​​​​​​​

  • 绝对路径:从盘符开始
File file1 = new File(“D:\\itheima\\a.txt”);
  • 相对路径:相对于当前项目下的路径
File file2 = new File(“a.txt”);
File file3 = new File(“模块名\\a.txt”);

绝对路径和相对路径的区别:

绝对路径:完整的路径名,不需要任何的其他信息就可以定位它所表示的文件。

相对路径:必须使用取自其他路径的信息进行解释。

删除目录的注意事项

如果一个目录中有内容(目录,文件),不能直接删除。应该先删除该目录下的内容,最后删除该目录

package com.ithmm_01;
 
import java.io.File;
import java.io.IOException;
 
public class FileDemo04 {
    public static void main(String[] args) throws IOException {
        //需求1:在当前模块目录下创建java.txt 文件
        File f =  new File("Io\\java.txt");
 
        //需求2:删除当前模块目录下的java.txt 文件
        System.out.println(f.delete());
 
        //需求3:在当前模块目录下创建ithmm目录
        File f2 = new File("Io\\ithmm");
       // System.out.println(f2.mkdir());
        System.out.println(f2.delete());
 
        //需求4:在当前模块目录下创建ithmm,然后在该目录下创建一个文件java.txt
        File f3 = new File("Io\\ithmm");
        System.out.println(f3.mkdir());
        File f4 = new File("Io\\ithmm\\java.txt");
        System.out.println(f4.createNewFile());
 
        
        //需求6:删除当前目录ithmm,首先要删除该目录下的文件
        System.out.println(f4.delete());
        System.out.println(f3.delete());
    }
}

 不会删除

  • boolean mkdir() 创建由此File表示的目录
  • boolean mkdirs() 创建由此File表示的目录,包括任何必须但不存在的父目录
		//在内存中创建一个文件夹对象,当前文件夹对象是指最后一级c
		File dir2 = new File("D:/a/b/c");//file指代c文件夹。
		//在硬盘创建多层级的文件夹对象。  
		boolean mkdirs = dir2.mkdirs();

4、目录的遍历

  • public string[] list() : 返回一个String数组,表示该File目录中的所有子文件或目录。
  •  public File[] listFiles() : 返回一个Fle数组,表示该File目录中的所有的子文件或目录。
  • 如果遍历的路径不是一个目录,则会抛出空指针异常
import java.io.File;
 
public class FileTest4 {
    public static void main(String[] args) {
        File dir=new File("d:\\java_code");
 
        //获取当前目录下的文件以及文件夹的名称
        String[] names=dir.list();
        for (String name:names){
            System.out.println(name);
        }
        //获取当前目录下的文件以及文件夹对象,只要拿到了文件对象,那么就可以获取更多信息
        File[] files=dir.listFiles();
        for (File file:files){
            System.out.println(file);
        }
    }
}

其他方法

boolean endsWith(String s); 后缀是否是字符串s

5、递归

5.1、概述

递归:指在当前方法内调用自己的这种现象。

5.2、递归的分类:

  • 逃归分为两种,直接递归和间接递归。
  • 直接递归称为方法自身调用自己。
  • 间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法。 

注意事项:

  •  递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出。
  • 在递归中虽然有限定条件,但是递归次数不能太多。否则也会发生栈内存溢出。
  • 构造方法,禁止递归

自己调用自己称之为递归 递(调用自己) 归(条件判断)

调用方法是递进入方法内部,方法反码执行完毕归来到调用的地方;

案例:

public class FileTest8 {
    static int count=1;
    public static void main(String[] args) {
            //自己调用自己称之为递归 递(调用自己) 归(条件判断)
            System.out.println("====1====");
            System.out.println("====2====");
            System.out.println("====3====");
            fun();
            System.out.println("====4====");
            System.out.println("====5====");
            System.out.println("====6====");
        }
        public static void fun(){
            System.out.println("====fun1====");
            System.out.println("====fun2====");
            count++;
            //判断终止条件
            if(count>3){
                return;
            }
            fun();
            System.out.println("====fun3====");
            System.out.println("====fun4====");
        }
    }

输出结果:

 
====1====
====2====
====3====
====fun1====
====fun2====
====fun1====
====fun2====
====fun1====
====fun2====
====fun3====
====fun4====
====fun3====
====fun4====
====4====
====5====
====6====

使用递归打印1-10

public class FileTest7 {
    public static void main(String[] args) {
        print(10);
    }
    public static void print(int n) {
        System.out.println(n);
        n--;
        if (n>0){
            print(n);
        }else {
            return;
        }
    }
}

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值