Java-File类

1 File类概述

        File类文件文件夹抽象为一个类,可以通过调用File类方法来实现对文件或文件夹的查询增删操作;File通过路径进行初始化,所表示的文件或文件夹在系统中可以不存在。

2 相对路径和绝对路径

(1)绝对路径是从盘符开始表示的路径,可以在文件的任意位置都可以被识别,但是书写较长,开发中不常用;

(2)相对路径,是依赖于某一个路径的省略写法,只能在其依赖路径下被识别,书写简便,开发中经常使用。

3 File类常用方法

(1)构造方法

        1)public File(String pathname);使用字符串路径名来初始化文件对象;

        2)public File(String parent , String child),使用分开的字符串路径来初始化文件对象

        3)public File(File parent,String child),使用File父路径和字符串子路径来初始化对象

// 文件路径名
String pathname = "D:\\aaa.txt";
File file1 = new File(pathname);
// 文件路径名
String pathname2 = "D:\\aaa\\bbb.txt";
File file2 = new File(pathname2);

// 通过父路径和子路径字符串
String parent = "d:\\aaa";
String child = "bbb.txt";
File file3 = new File(parent, child);

// 通过父级File对象和子路径字符串
File parentDir = new File("d:\\aaa");
String child = "bbb.txt";
File file4 = new File(parentDir, child);

 (2)获取方法

       1)public String getAbsolutePath():返回此文件对象的绝对路径;

       2)public String getPath():获取该文件对象在初始化时使用的路径,File的toString()方法直接调用该方法;

       3)public String getName():获取该文件名称(也就是文件路径的最后一级);

       4)public long length():返回此文件的字节长度,不常用(只能正确表示简单文件,复杂文件表示不准)。

           注意:length只能表示文件长度,如果是文件夹,返回为指定值,实际代码测试结果:一直表示4096字节,和实际文件夹内所有文件大小总和不符

public class FileGet {
  public static void main(String[] args) {
    File f = new File("d:/aaa/bbb.java");
    System.out.println("文件绝对路径:"+f.getAbsolutePath());
    System.out.println("文件构造路径:"+f.getPath());
    System.out.println("文件名称:"+f.getName());
    System.out.println("文件长度:"+f.length()+"字节");
    File f2 = new File("d:/aaa");
    System.out.println("目录绝对路径:"+f2.getAbsolutePath());
    System.out.println("目录构造路径:"+f2.getPath());
    System.out.println("目录名称:"+f2.getName());
    System.out.println("目录长度:"+f2.length());
  }
} 
输出结果:
文件绝对路径:d:\aaa\bbb.java
文件构造路径:d:\aaa\bbb.java
文件名称:bbb.java
文件长度:636字节
目录绝对路径:d:\aaa
目录构造路径:d:\aaa
目录名称:aaa
目录长度:4096

 (3)判断方法

        1)public boolean exists():判断系统中是否存在该File所表示的文件/文件夹;

        2)public boolean isDirectory():判断该File对象所表示的是否是一个文件夹;

        3)public boolean isFile():判断该File对象所表示的是否是一个文件;

 

public class FileIs {
  public static void main(String[] args) {
    File f = new File("d:\\aaa\\bbb.java");
    File f2 = new File("d:\\aaa");
    // 判断是否存在
    System.out.println("d:\\aaa\\bbb.java 是否存在:"+f.exists());
    System.out.println("d:\\aaa 是否存在:"+f2.exists());
    // 判断是文件还是目录
    System.out.println("d:\\aaa 文件?:"+f2.isFile());
    System.out.println("d:\\aaa 目录?:"+f2.isDirectory());
  }
} 
输出结果:
d:\aaa\bbb.java 是否存在:true
d:\aaa 是否存在:true
d:\aaa 文件?:false
d:\aaa 目录?:true

 (4)创建和删除方法

   1)public boolean createNewFile():创建一个已知目录下未存在文件;如果文件目录未知,抛出IO异常,如果文件存在则返回false;

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

   3)public boolean mkdirs():创建多级文件夹

   4)public boolean delete():删除文件夹或文件夹,文件夹中包含内容不能删除;

public class FileCreateDelete {
public static void main(String[] args) throws IOException {
// 文件的创建
File f = new File("aaa.txt");
System.out.println("是否存在:"+f.exists()); // false
System.out.println("是否创建:"+f.createNewFile()); // true
System.out.println("是否存在:"+f.exists()); // true
// 目录的创建
File f2= new File("newDir");
System.out.println("是否存在:"+f2.exists());// false
System.out.println("是否创建:"+f2.mkdir()); // true
System.out.println("是否存在:"+f2.exists());// true
// 创建多级目录
File f3= new File("newDira\\newDirb");
System.out.println(f3.mkdir());// false
File f4= new File("newDira\\newDirb");
System.out.println(f4.mkdirs());// true
// 文件的删除
System.out.println(f.delete());// true
// 目录的删除
System.out.println(f2.delete());// true
System.out.println(f4.delete());// false
}
}

(5)目录的遍历

  1)public String[] list():返回文件夹中的所有文件或文件夹字符串名称,如果不是目录或IO错误,返回null;

  2)public File[] listFiles();返回文件夹中所有的文件或文件夹File对象,如果不是目录或IO错误,返回null;

4 文件过滤器

(1)文件过滤器是一个接口,有两个过滤器,java.io.FileFilter和java.io.FilenameFilter,两个接口方法功能相同,都只有一个文件过滤方法accept(),差别只是参数不同;该接口作用是将过滤方法传递给list()和listFiles()方法,使list和listFiles只包含符合条件的文件。

(2)过滤器使用

        1)创建FileFilter实现类,实现accept方法,将其传递给list()/listFiles()使用

        2)使用lambda表达式直接传递accept方法的实现

public class DiGuiDemo4 {
  public static void main(String[] args) {
    File dir = new File("D:\\aaa");
    printDir2(dir);
  } 
  public static void printDir2(File dir) {

  // 匿名内部类方式,创建过滤器子类对象
    File[] files = dir.listFiles(new FileFilter() {
      @Override
      public boolean accept(File pathname) {
      return pathname.getName().endsWith(".java")||pathname.isDirectory();
    }
   });
   // 循环打印
   for (File file : files) {
    if (file.isFile()) {
      System.out.println("文件名:" + file.getAbsolutePath());
    } else {
    printDir2(file);
  }
 }
 }
}

//使用Lambda表达式
public static void printDir3(File dir) {
  // lambda的改写
  File[] files = dir.listFiles(f ‐>{
    return f.getName().endsWith(".java") || f.isDirectory();
  });
  // 循环打印
  for (File file : files) {
    if (file.isFile()) {
    System.out.println("文件名:" + file.getAbsolutePath());
  } else {
    printDir3(file);
  }
 }
}

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值