Featured image of post java高级之File

java高级之File

本文阅读量

File

是一种将数据长久保存到硬盘的技术

File是java.io.包下的类,File类的对象,用于代表当前操作系统的文件(可以是文件或文件夹)

注意:

File类只能对文件本身进行操作,不能读写文件里面存储的数据

创建File对象

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
// 1、方式1
File f1 = new File("D:/images/晴空.png");
// File f1 = new File("D:\\images\\晴空.png");
// 获取文件大小(字节数)
System.out.println(f1.length());


// 2、方式2(File对象可以代表文件,也可以代表文件夹)
File f2 = new File("D:/images");
f2.length(); // 获取到的是文件夹本身的大写,不是里面全部内容的大小


// 3、方式3(File对象的文件路径可以是不存在的,以后可以创建出来)
File f3 = new File("E:/images");


// 4、方式4(File对象的路径可以支持绝对路径,相对路径)相对路径:从project(工程)下查找文件
File f4 = new File("cn.snailsir.pkg/src/晴空.png");// 本项目下的cn.snailsir.pkg包下的src下的晴空.png文件

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
// 创建file类
File f = new File("E:\\resource\\meinv.png");

// 1、public boolean exists():判断当前文件对象,对应的文件路径是否存在,存在返回true
System.out.println(f.exists());

// 2、public boolean isFile():判断当前文件对象,是否是文件,如果是文件返回true
System.out.println(f.isFile());

// 3、public boolean isDirectory():判断当前文件对象,是否是文件夹,如果是文件夹返回true
System.out.println(f.isDirectory());

// 4、public String getName():获取文件的名称,包括后缀
System.out.println(f.getName());

// 5、public long length():获取文件大小(字节数)
System.out.println(f.length());

// 6、public long lastModified():获取文件最后修改时间
long time = f.lastModified();
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 将long类型的时间戳转换成LocalDateTime对象
LocalDateTime dateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(time),ZonedId.systemDefault());
// 使用DateTimeFormatter对象dtf将LocalDateTime格式化为指定格式的字符串时间
String formattedTimed = dtf.format(dateTime);
//String formattedTimed = LocalDateTime.ofInstant(Instant.ofEpochMilli(time),ZonedId.systemDefault()).format(dtf);


// 7、public String getPath() 获取创建文件对象时,使用的路径
System.out.println(f.getPath());

// 8、public String getAbsolutePath() 获取创建文件对象时,使用的绝对路径
System.out.println(f.getAbsolutePath());

文件创建与删除

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
// 1、创建文件
File f1 = new File("D:\\a.txt"); // 文件不存在
System.out.println(f1.createNewFile());// true

// 2、创建文件夹
File f2 = new File("D:\\picture\\aa\\bbb"); // 文件夹不存在
System.out.println(f2.mkdir());// false,只能创建1级目录 D:\\picture

// 3、创建文件夹
File f3 = new File("D:\\picture\\aa\\bbb"); // 文件夹不存在
System.out.println(f3.mkdirs());// true,递归创建

// 4、删除文件和空文件夹
f3.delete();

遍历文件夹

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
// list,获取当前目录下所有的”一级文件名称(文件或文件夹名称)“到一个字符串数组中
File f = new File("E:\\pictures");
String[] names = f.list();
for(String name:names){
  System.out.println(name);
}
// listFiles() 获取当前目录下所有的“一级文件对象”到一个文件对象数组中去返回(重点)
File f1 = new File("E:\\pictures");
File[] files = f1.listFiles();
for(File file:files){
  System.out.println(file.getAbsolutePath()); 
}

注意:

  • 使用listFiles(),主调是文件,或者路径不存在时,返回null(new File("不存在的路径或文件").listFiles()返回null)
  • 使用listFiles(),主调是空文件夹,返回一个长度为0的数组(new File("空文件夹").listFiles().length()结果为0l)
  • 使用listFiles(),主调是文件夹,并且里面有隐藏文件时,将里面所有文件和文件夹的路径放在file数组中返回,包括隐藏文件
  • 使用listFiles(),主调是文件夹,但是没有权限访问该文件夹是,返回null

文件搜索(递归)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
public static void searchFile(File dir,String fileName){
  // 1、卫语句
  if(dir == null || !dir.exists() || dir.isFile()) {
    return;
  }
  // 2、获取当前目录下的全部一级文件对象
  File[] files = dir.listFiles();
  if(files == null || files.length() == 0){
    return;
  }
  // 3、遍历全部一级文件对象
  for(File file:files){
    //4、判断当前file对应的文件对象是文件还是文件夹
    if(file.isFile()){
      if(file.getName().contains(fileName)){
        System.out.println(file.getAbsolutePath());
      }
    }else{
      searchFile(file,fileName); 
    }
  }
}
使用 Hugo 构建
主题 StackJimmy 设计