Java File类详解

基础知识

File类是什么?

File对象代表路径,路径分为相对路径和绝对路径。

●File对象就表示一个路径,可以是文件的路径、也可以是文件夹的路径。

●这个路径可以是存在的,也允许是不存在的。

如路径1:"a.txt"路径2:"abc\\a.txt"是相对路径,路径1:“C:\\a.txt”

路径2:"C:\\abc\\a.txt"是绝对路径。

File的常用方法:

方法名称

说明

public File(String pathname)

根据文件路径创建文件对象

public File(String parent,String child)

根据父路径名字符串和子路径名字符串创建文件对象

public File(Fileparent,String child)

根据父路径对应文件对象和子路径名字符串创建文件对象


import java.io.File;

public class FileDemo1 {
 public static void main(String[] args) {
 /*
 * public File(String pathname) 根据文件路径创建文件对象
 public File(String parent,String child) 根据父路径名字符串和子路径名字符串创建文件对象
 public File(File parent,String child) 根据父路径对应文件对象和子路径名字符串创建文件对象

 E:\JavaCode\Files\a.txt
 E:/JavaCode/Files/a.txt
 *
 */
 // 1.根据字符串表示的路径,变成File对象
 String path = "E:/JavaCode/Files/a.txt";
 File f1 = new File(path);
 System.out.println(f1);

 // 2. 父级路径 E:\JavaCode\Files
 // 子级路径 a.txt
 String parent = "E:\\JavaCode\\Files\\"; // 写E:\JavaCode\Files也可以
 String child = "a.txt";
 File f2 = new File(parent, child);
 System.out.println(f2);

 System.out.println(File.pathSeparator);
 System.out.println(File.separator);

 // 3.把一个File表示的路径和String表示的路径进行拼接
 File parentFile = new File("E:\\JavaCode\\Files");
 String child2 = "a.txt";
 File f3 = new File(parentFile, child2);
 System.out.println(f3);

 }
}


小结

1.File表示什么?

File对象表示路径,可以是文件、也可以是文件夹。这个路径可以是存在的,也可以是不存在的

2.绝对路径和相对路径是什么意思?

绝对路径是带盘符的。

相对路径是不带盘符的,默认到当前项目下去找。

3.File三种构造方法的作用?

  • public File(String pathname)把字符串表示的路径变成File对象
  • public File(String parent,String child)把父级路径和子级路径进行拼接
  • public File(Fileparent,String child)把父级路径和子级路径进行拼


File的常见成员方法

判断、获取相关的方法

方法名称

说明

public boolean isDirectory()

判断此路径名表示的File是否为文件夹

public boolean isFile()

判断此路径名表示的File是否为文件

public boolean exists()

判断此路径名表示的File是否存在

public long length()

返回文件的大小(字节数量Bytes)

public String getAbsolutePath()

返回文件的绝对路径

public String getPath()

返回定义文件时使用的路径

public String getName()

返回文件的名称,带后缀

public long lastModified()

返回文件的最后修改时间(时间毫秒值)

方法使用示例:

import java.io.File;
import java.util.Date;

public class FileDemo2 {
 public static void main(String[] args) {

 // 1.根据字符串表示的路径,变成File对象
 String path = "E:/JavaCode/Files/a.txt";
 File f1 = new File(path);
 // 2.方法使用示例
 System.out.println("isFile:" + f1.isFile());
 System.out.println("isDirectory:" + f1.isDirectory());
 System.out.println("exists:" + f1.exists());
 System.out.println("length:" + f1.length());

 System.out.println("getAbsolutePath:" + f1.getAbsolutePath());
 System.out.println("getPath:" + f1.getPath());
 System.out.println("getName:" + f1.getName());
 System.out.println("lastModified:" + new Date(f1.lastModified()));

 }
}

一种可能的输出为:

isFile:true
isDirectory:false
exists:true
length:131
getAbsolutePath:E:\JavaCode\Files\a.txt
getPath:E:\JavaCode\Files\a.txt
getName:a.txt
lastModified:Mon Dec 04 20:26:37 CST 2023

方法length()

方法length的作用是返回文件的大小(字节数量)

1:这个方法只能获取文件的大小,单位是字节如果单位我们要是M,G,可以不断的除以1024

2:这个方法无法获取文件夹的大小如果我们要获取一个文件夹的大小,需要把这个文件夹里面所有的文件大小都累加在一起。

方法getName()

如果调用者是文件,本方法将返回该调用者的文件和后缀名,也即扩展名。如果调用者是文件夹:返回的就是文件夹的名字

创建、删除相关的方法

方法名称

说明

public boolean createNewFile()

创建一个新的空的文件

public boolean mkdir()

创建单级文件夹

public boolean mkdirs()

创建多级文件夹

public boolean delete()

删除文件、空文件夹

delete方法默认只能删除文件和空文件夹,delete方法直接删除不走回收站

方法createNewFile

  • createNewFile创建一个新的空的文件如果当前路径表示的文件是不存在的,则创建成功,方法返回true如果当前路径表示的文件是存在的,则创建失败,方法返回false
  • 如果创建文件时其父级路径是不存在的,那么方法会有异常IOException
  • createNewFile方法创建的一定是文件,如果路径中不包含后缀名,则创建一个没有后缀的文件。


方法mkdir

  • windows当中路径是唯一的,如果当前路径已经存在,则创建失败,返回false
  • mkdir方法只能创建单级文件夹,无法创建多级文件夹。


import java.io.File;
import java.io.IOException;

public class FileDemo3 {
 public static void main(String[] args) throws IOException {
 // 1.创建一个新的空的文件
 File f1 = new File("E:/JavaCode/Files/c.txt");
 boolean flag = f1.createNewFile();
 System.out.println(flag);

 // 2.mkdir
 // 细节1:windows当中路径是唯一的,如果当前路径已经存在,则创建失败,返回false
 // 细节2:mkdir方法只能创建单级文件夹,无法创建多级文件夹。
 File f2 = new File("E:/JavaCode/Files/aaa");
 boolean flag2 = f2.mkdir();
 System.out.println(flag2);

 // 3.mkdirs 创建多级文件夹
 File f3 = new File("E:/JavaCode/Files/aaa/bbb/ccc");
 boolean flag3 = f3.mkdirs();
 System.out.println(flag3);
 }
}

方法delete

用来删除文件或文件夹。

  • 如果删除的是文件,则直接删除,不走回收站。
  • 如果删除的是空文件夹,则直接删除,不走回收站,
  • 如果删除的是有内容的文件夹,则删除失败。

获取并遍历相关的方法

方法名称

说明

public File[]listFiles()

获取当前该路径下所有内容

本方法的特点:

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


import java.io.File;
import java.io.IOException;

public class FileDemo5 {
 public static void main(String[] args) throws IOException {
 // 1.创建一个新的空的文件
 File f1 = new File("E:/JavaCode/");


 // 2.listFiles()方法
 //作用:获取aaa文件夹里面的所有内容,把所有的内容放到数组中返回
 File[] files = f1.listFiles();
 for (File file : files) {
 // file依次表示文件夹中每一个文件或文件夹
 System.out.println(file.getAbsolutePath());
 }
 }
}

获取并遍历相关的方法

方法名称

说明

public static File[]listRoots()

列出可用的文件系统根

public String[]list()

获取当前该路径下所有内容

public String[]list(FilenameFilter filter)

利用文件名过滤器获取当前该路径下所有内容

public File[]listFiles()

获取当前该路径下所有内容

public File[]listFiles(FileFilter filter)

利用文件名过滤器获取当前该路径下所有内容

public File[]listFiles(FilenameFilter filter)

利用文件名过滤器获取当前该路径下所有内容

方法listRoots

文件系统根,对于Windows系统来说就是列出所有盘符。

方法list

获取当前目录下的内容。

import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.Arrays;

public class FileDemo6 {
 public static void main(String[] args) throws IOException {
 // 1. listRoots 获取系统中所有的盘符
 File[] files = File.listRoots();
 System.out.println(Arrays.toString(files));

 System.out.println("===============");

 // 2. list 获取当前该路径下所有内容(仅仅能获取名字)
 File f1 = new File("E:/JavaCode/Files");
 String[] list = f1.list();
 for (String s : list) {
 System.out.println(s);
 }

 // 3. list(FilenameFilter filter) 利用文件名过滤器获取当前路径下的所有内容
 // 需求:获取目录下所有txt文件
 File f2 = new File("E:/JavaCode/Files");
 f2.list(new FilenameFilter() {
 //accept方法的形参,依次表示aaa文件夹里面每一个文件或者文件夹的路径
 // 参数一:父级路径
 // 参数二:子级路径
 //返回值:如果返回值为true,就表示当前路径保留
 // 如果返回值为false,就表示当前路径舍弃不要
 @Override
 public boolean accept(File dir, String name) {
 File src = new File(dir, name);
 return src.isFile() && name.endsWith(".txt");
 }
 });

 }
}


方法listFiles(FileFilter filter)


import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
import java.io.IOException;

public class FileDemo7 {
 public static void main(String[] args) throws IOException {
 // . listFiles(FileFilter filter) 利用文件名过滤器获取当前路径下的所有内容
 // 需求:获取目录下所有txt文件
 File f2 = new File("E:/JavaCode/Files");

 // FileFilter
 File[] txtFiles1 = f2.listFiles(new FileFilter() {
 @Override
 public boolean accept(File pathname) {
 return pathname.isFile() && pathname.getName().endsWith(".txt");
 }
 });

 // FilenameFilter
 File[] txtFiles2 = f2.listFiles(new FilenameFilter() {
 @Override
 public boolean accept(File dir, String name) {
 File src = new File(dir, name);
 return src.isFile() && name.endsWith(".txt");
 }
 });

 }
}