java.io.File类

Bertha 。 2023-10-04 12:37 60阅读 0赞
8.File
8.1.概述
  • java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。
  • 是文件和目录路径名的抽象表达形式 ,Java中把文件或者目录(文件夹)都封装成File对象。创建File类对象时,系统并不会去验证此文件或文件夹是否存在。可以理解为只是一个字符串。
  • 自由选择以下一种方式书写路径名,都是可以的

    • 全部用“//”
    • 全部用“\\”(推荐使用)
    • 全部用“/”
    • 不要使用“\”,单独使用“\”,这是一个转义字符
8.2.构造方法
  • public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
  • public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的 File实例。
  • public File(File parent, String child) :从父抽象路径名和子路径名字符串创建新的 File实例。
8.3.常用方法
8.3.1.创建功能
  • public boolean createNewFile():只能创建文件,并且在此之前没有同名文件存在;文件所在的目录一定真实存在。 不能创建文件夹
  • public boolean mkdir():只能创建单级目录文件夹
  • public boolean mkdirs():可以创建多级目录文件夹,也可以创建单级目录

    File file = new File(“E:\temp\aa.txt”);
    System.out.println(file.createNewFile()); //true 创建成功

    file = new File(“X:\a.txt”);
    System.out.println(file.createNewFile()); //false 抛出异常

    file = new File(“E:\temp\aaa”);
    System.out.println(file.mkdir()); //创建了一个aaa文件夹

    File file = new File(“E:\temp\aaa\bbb\ccc”);
    System.out.println(file.mkdirs()); //创建了aaa文件夹下的bbb下的ccc,三级文件夹

8.3.2.删除功能
  • public boolean delete():文件或文件夹成功删除就返回true,文件不存在或删除失败就返回false

    • 只能删除空文件夹。若文件夹里还有文件,就无法删除;若文件夹里还有文件夹,也无法删除。
    • 若想一次性删除多级目录,可以使用递归删除。

    File file = new File(“E:\temp\aa.txt”);
    System.out.println(file.delete()); //成功删除aa.txt文件,true

    File file = new File(“E:\temp\tt.txt”);
    System.out.println(file.delete()); //tt.txt文件不存在,返回false

    File file = new File(“E:\temp\aaa”);
    System.out.println(file.delete()); //尝试删除多级文件夹,删除失败 false

    File file = new File(“E:\temp\aaa\bbb\ccc”);
    System.out.println(file.delete()); //尝试删除最底层的空文件夹,删除成功 返回true

    //递归删除非空文件夹
    public class DeleteFolder {

    1. public static void main(String[] args) {
    2. File file = new File("E:\\firstLevel");
    3. deleteAll(file);
    4. }
    5. public static void deleteAll(File dir) {
    6. File[] files = dir.listFiles();
    7. if (files != null) {
    8. //遍历这个File类数组
    9. for (File file : files) {
    10. //判断它是否是文件,是的话就删除
    11. if (file.isFile()) file.delete();
    12. //否则就是文件夹,再次判断它是不是空的,空的就删除
    13. else if(file.list().length == 0) file.delete();
    14. //非空文件夹继续调用方法递归查找这个文件夹
    15. else deleteAll(file);
    16. }
    17. }
    18. //删除传入的,内容已经删空了的文件夹
    19. dir.delete();
    20. }

    }

8.3.3.重命名功能
  • public boolean renameTo(File dest):若新的文件名位于同一个文件夹,就是重命名功能,若新的文件名不在之前的文件夹,实际上就是剪切功能

    File file = new File(“E:\temp\A.txt”);
    File desk = new File(“E:\temp\B.txt”);
    System.out.println(file.renameTo(desk)); //结果是把A重命名为B.txt

    //匿名对象的方法
    File file = new File(“E:\temp\A.txt”);
    System.out.println(file.renameTo(new File(“E:\temp\B.txt”)));

    //其实也是剪切的功能
    File file = new File(“E:\temp\B.txt”);
    System.out.println(file.renameTo(new File(“E:\剪切.txt”)));
    //结果可以发现,B.txt文件消失,在E:\出现了 剪切.txt

8.3.4.判断功能
  • public boolean isFile():是否是文件p
  • public boolean isDirectory():是否是文件夹
  • public boolean exists():是否存在(不管是文件还是文件夹)

    File file = new File(“E:\剪切.txt”);
    System.out.println(file.isFile()); //true,是文件
    System.out.println(file.isDirectory()); //false,不是文件夹

    File file = new File(“E:\temp”);
    System.out.println(file.isFile()); //false,不是文件
    System.out.println(file.isDirectory()); //true,是文件夹

    File file = new File(“X:\temp”);
    System.out.println(file.exists()); //false ,X盘不存在

    File file = new File(“E:\剪切.txt”);
    System.out.println(file.exists()); //true ,存在

  • public boolean canExecute ():是否可执行

  • public boolean canRead():是否可读取
  • public boolean canWrite():是否可写入
  • public boolean isHidden():是否被隐藏

    File file = new File(“E:\temp\a.txt”);
    System.out.println(file.canExecute()); //true
    System.out.println(file.canRead()); //true
    System.out.println(file.canWrite()); //true
    System.out.println(file.isHidden()); //false

8.3.5.基本获取功能
  • 相对路径:相对某文件/文件夹来说的路径,可以设置。默认在项目的文件夹
  • 绝对路径 : 完整的此文件所在目录,包括盘符和文件夹。如果直接输出文件对象,输出的结果就是绝对路径
  • public File getAbsoluteFile():返回此文件的绝对路径形式,返回值是File
  • public String getPath():获取文件路径(如果创建File对象时指向相对路径就获取相对,绝对就获取绝对)
  • public String getName():获取文件/文件夹的名字(包含后缀)
  • public long length():获取文件实际内容的长度
  • public long lastModified():返回此文件最后一次被修改的时间,用毫秒来表示
  • public String getParent():获取该文件的父目录 注意返回的是String类型的目录
  • public File getParentFile():获取该文件的父文件,即上一级文件 注意返回的是File类型的文件对象

    //相对路径
    File file = new File(“a.txt”);
    file.createNewFile(); //默认的相对路径在项目文件夹,在Day25文件夹下生成a.txt
    System.out.println(file)

    //绝对路径
    File file = new File(“E:\temp\a.txt”);
    file.createNewFile();
    System.out.println(file);
    //E:\temp\a.txt

    //public File getAbsoluteFile()`
    File file = new File(“a.txt”);
    file.createNewFile();
    System.out.println(file);
    File absoluteFile = file.getAbsoluteFile(); //把相对路径文件file转为绝对路径的形式
    System.out.println(absoluteFile);
    // a.txt file的相对路径形式
    // F:\王道训练营15期JAVA\学习内容\第一阶段 Java SE\Code\Day25\a.txt 绝对路径形式

    //public String getPath()
    File file = new File(“B.txt”);
    System.out.println(file.getPath());//B.txt
    File file2 = new File(“E:\temp\C.txt”);
    System.out.println(file2.getPath()); //E:\temp\C.txt
    File file = new File(“B.txt”);
    System.out.println(file.getAbsolutePath());//F:\王道训练营15期JAVA\学习内容\第一阶段 Java SE\Code\Day25\B.txt

    //public String getName()
    File file = new File(“F:\JAVA\学习内容\第一阶段 Java SE\Code\Day25\B.txt”);
    System.out.println(file.getName());//B.txt
    File file = new File(“F:\JAVA\学习内容”);
    System.out.println(file.getName());

    //public long length()
    File file = new File(“E:\temp\a.txt”);
    System.out.println(file);
    System.out.println(file.length());//E:\temp\a.txt

    //public long lastModified()
    File file = new File(“F:\JAVA\学习内容”);
    System.out.println(file.lastModified());//返回了一个被修改时的系统毫秒时间,可用创建Date对象来显示出来
    Date date = new Date(file.lastModified());
    System.out.println(date);//1559211896576 //Thu May 30 18:24:56 CST 2019

    //public String getParent()
    File file =new File(“D:/test/xwf/1.txt”);
    String parent = file.getParent();
    System.out.println(parent);

    //public File getParentFile()
    File file =new File(“D:/test/xwf/1.txt”);
    File parentFile = file.getParentFile();
    System.out.println(parentFile.getAbsolutePath());

    //父文件创建多级目录,把不存在的文件夹都创建出来了
    parentFile.mkdirs();
    //因此需要注意:创建多级目录,调用mkdirs方法的file对象不能是文件,必须是文件夹

8.3.6.高级获取功能
  • public String[] list():返回一个字符串数组,这些字符串指向此抽象的路径名表示的目录中的所有文件和文件夹的名字

    • 如果该路径表示的是文件,会返回null。
    • 如果路径表示的文件夹没有读取的权限,也会返回null。
    • 即使这个文件夹是空的,返回值也不是null !所以用file.list()==null 来判断是否为空文件夹是错误的。
    • 正确的方法为:file.list().length == 0 ,如果为true,则此文件夹为空 ,即判断数组长度是否为0。

    public static void main(String[] args) {

    1. File file = new File("E:\\temp");
    2. String[] list = file.list();
    3. for (String s : list){
    4. System.out.println(s);
    5. }

    }
    //a.txt
    //bbb
    //dqf4.txt
    //dqw5.xlsx

  1. //递归获取文件名后缀为java的文件
  2. public static void main(String[] args) {
  3. File file = new File("E:\\temp");
  4. ArrayList<File> list = new ArrayList<>();
  5. txtDemo(file, list);
  6. for (File file1 : list) {
  7. System.out.println(file1);
  8. }
  9. }
  10. public static void txtDemo(File dir, ArrayList<File> list) {
  11. File[] files = dir.listFiles();
  12. if (files != null) {
  13. for (File file : files) {
  14. if (file.isFile()) {
  15. if (file.getName().endsWith("java")) list.add(file);
  16. } else {
  17. txtDemo(file, list);
  18. }
  19. }
  20. }
  21. }
  • public File[] listFiles(): 返回指定file目录下的文件和文件夹的绝对路径形式的File文件

    • 同样,如果file是一个文件,则会抛出异常
    • 即使这个文件夹是空的,返回值也不是null !!!!!所以用file.listFiles()==null 来判断是否为空文件夹是错误的
    • 正确的方法为: file.listFiles().length == 0 ,如果为true,则此文件夹为空 ,即判断数组长度是否为0

    public static void main(String[] args) {

    1. File file = new File("E:\\temp");
    2. File[] files = file.listFiles();
    3. for (File file1 : files){
    4. System.out.println(file1);
    5. }

    }
    //E:\temp\a.txt
    //E:\temp\bbb
    //E:\temp\dqf4.txt
    //E:\temp\dqw5.xlsx

  • File[] listFiles(FileFilter filter) 获取这个文件夹下,满足filter过滤器的条件的文件

    • public interface FileFilter 过滤器是个接口,不能直接实例化,需要重写方法 boolean accept(File pathname)

    //获取E:\temp中的所有以txt结尾的文件,要求用过滤器过滤,而不是自己判断

    public class FileTest2 {

    1. public static void main(String[] args) {
    2. File file = new File("E:\\temp");
    3. //方式一:匿名内部类创建一个过滤器
    4. FileFilter fileFilter = new FileFilter() {
    5. @Override
    6. public boolean accept(File dir) {
    7. //条件是 dir对象是一个文件并且它的名字以txt结尾
    8. return dir.isFile() && dir.getName().endsWith("txt");
    9. }
    10. };
    11. //在有过滤器的情况下创建一个File[]数组,并且遍历
    12. File[] files = file.listFiles(fileFilter);
    13. for(File f : files){
    14. System.out.println(f);
    15. }
    16. //因为FileFilter接口里只有一个抽象方法accept(),因此可以使用lamba表达式
    17. //方式二:使用lamba表达式
    18. File[] listFile = file.listFiles(
    19. //匿名内部类试用lamda表达式,()里的pathname可以省略参数类型
    20. (pathname) -> {
    21. return pathname.isFile() &&
    22. pathname.getName().endsWith("txt");
    23. }
    24. );
    25. //创建过滤器实现类作为参数传递给listFiles()方法
    26. if (listFile != null) {
    27. for (File f : listFile) {
    28. System.out.println(f);
    29. }
    30. }
    31. }

    }
    // E:\temp\a.txt
    // E:\temp\dqf4.txt

发表评论

表情:
评论列表 (有 0 条评论,60人围观)

还没有评论,来说两句吧...

相关阅读