File类
概述:
java.io.File类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。
注意:File类是一个与系统无关的类,任何的操作系统都可以使用这个类中的方法。
重点:file:文件;directory:文件夹/目录;path:路径
File类的四个静态成员变量(查看API文档):
字段摘要 | |
---|---|
static String | pathSeparator 与系统有关的路径分隔符,为了方便,它被表示为一个字符串。 |
static char | pathSeparatorChar 与系统有关的路径分隔符。 |
static String | separator 与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。 |
static char | separatorChar 与系统有关的默认名称分隔符。 |
File.pathSeparator:路径分隔符(是一个分号,大家可以回忆配置环境变量的时候,两个path之间的分隔符就是一个分号,注意windows系统的是分号,Linux系统是冒号)
File.separator:文件名称分隔符(反斜杠,windows系统是反斜杠,Linux系统是正斜杠)
操作路径的时候尽量不要写死,布置在服务器上时未知系统,死路径容易报错。
如windows系统下的路径C:\\Users\\Desktop,写成"C:" + File.separator + "Users" + File.separator + "Desktop"就不会有错。
另外两个静态成员变量是字符串对应的char型。
路径:
绝对路径:是一个完整的路径,以盘符(C:D:)开始的路径,如C:\\Users\\Desktop
相对路径:是一个简化的路径,相对指的是相对于当前项目的根目录D:\\WorkSspace\\IdeaProjects,如存在D:\\WorkSspace\\IdeaProjects\\1.txt,可以简写为1.txt(可以省略项目的根目录)
注意事项:
1.路径不区分大小写
2.路径中的文件名称分隔符windows使用反斜杠,反斜杠是转义字符,两个反斜杠代表一个普通的反斜杠。
构造方法:
public File(String pathname):通过将给定的路径名字符串转换为抽象路径来创建新的File实例。
// public File(String pathname) // 通过将给定的路径名字符串转换为抽象路径来创建新的File实例。 // 参数:pathname路径名称,可以是以文件结尾也可以是以文件夹结尾; // 路径可以是绝对路径也可以是相对路径 // 路径可以存在,也可以是不存在 // 创建File对象,只是把字符串路径封装为File对象,不考虑路径的真假情况 File file1 = new File("D:\\WorkSpace\\IdeaProjects\\basic-code\\day04-code\\a.txt"); // 不存在的路径 System.out.println(file1); // 重写了toString方法,打印了路径
public File(String parent,String child):从父路径名字符串和子路径名字符串创建新的File实例。
show02("c:\\","b.txt"); private static void show02(String parent,String child) { // public File(String parent,String child) // 从父路径名字符串和子路径名字符串创建新的File实例。 /* 参数:把路径分成了两部分:parent父路径,child子路径 好处:父路径和子路径可以单独的书写,使用起来非常灵活,父路径和子路径都可以变化 */ File file = new File(parent,child); System.out.println(file); c:\b.txt }
public File(File parent,String child):从父抽象路径名和子路径名字符串创建新的File实例。(不常用)
注意路径可以存在,也可以不存在,创建File对象,只是把字符串路径封装为File对象,不考虑路径的真假情况。
常用方法:
获取功能的方法:
public String getAbsolutePath():返回此File的绝对路径名字符串
// public String getAbsolutePath():返回此File的绝对路径名字符串 // 获取的是构造方法中传递的路径,无论传递的是相对还是绝对路径,此方法get的都是绝对路径 File file1 = new File("D:\\WorkSpace\\IdeaProjects\\basic-code\\day04-code"); // 绝对路径 File file2 = new File("demo11"); // 相对路径 System.out.println(file1.getAbsolutePath()); // D:\WorkSpace\IdeaProjects\basic-code System.out.println(file2.getAbsolutePath()); // D:\WorkSpace\IdeaProjects\basic-code\demo11
public String getPath():将此File转换为路径名字符串
// public String getPath():将此File转换为路径名字符串 // 获取的是构造方法中传递的路径,传递的是相对就获取相对,是绝对就获取绝对 File file1 = new File("D:\\WorkSpace\\IdeaProjects\\basic-code\\day04-code"); // 绝对路径 File file2 = new File("demo11"); // 相对路径 System.out.println(file1.getPath()); // D:\WorkSpace\IdeaProjects\basic-code System.out.println(file2.getPath()); // demo11
public String getName():返回由此File表示的文件或目录的名称
// public String getName():返回由此File表示的文件或目录的名称 File file1 = new File("D:\\WorkSpace\\IdeaProjects\\basic-code\\day04-code"); // 文件夹 File file2 = new File("D:\\a.txt"); // 文件 System.out.println(file1.getName()); // day04-code System.out.println(file2.getName()); // a.txt
public long length():返回由此File表示的文件的大小
获取的是构造方法指定的文件的大小,以字节为单位
注意:
1.文件夹是没有大小概念的,不能获取文件夹大小;
2.如果构造方法中给出的路径不存在,那么length给出的大小为0。
File file1 = new File("D:\\WorkSpace\\IdeaProjects\\basic-code\\day04-code"); // 文件夹 File file2 = new File("D:\\a.txt"); // 文件 System.out.println(file1.getName()); // day04-code System.out.println(file2.getName()); // 194
对应文件大小截图:
判断功能的方法:
public boolean exists():此File表示的文件或目录是否实际存在。
/*public boolean exists():此File表示的文件或目录是否实际存在。 用于判断构造方法中的路径是否存在 存在返回true,不存在返回false*/ File file1 = new File("D:\\WorkSpace\\IdeaProjects\\basic-code"); // 绝对路径,存在 File file2 = new File("D:\\WorkSpace\\IdeaProjects\\basic-code\\1.txt"); // 绝对路径,不存在 File file3 = new File("day04-code"); // 相对路径,存在 File file4 = new File("1.txt"); // 相对路径,不存在 System.out.println(file1.exists()); // true System.out.println(file2.exists()); // false System.out.println(file3.exists()); // true System.out.println(file4.exists()); // false
public boolean isDirectory():此File表示的是否为目录。
public boollean isFile():此File表示的是否为文件。
注意:电脑的硬盘中只有文件/文件夹,两个方法是互斥
这两个方法使用前提,路径必须是存在的,否则都返回false。
// public boolean isDirectory():此File表示的是否为目录。 // public boollean isFile():此File表示的是否为文件。 File file1 = new File("D:\\WorkSpace\\IdeaProjects\\basic-code"); // 绝对路径,存在,文件夹 File file2 = new File("D:\\WorkSpace\\IdeaProjects\\basic-code\\day04-code\\day04-code.iml"); // 绝对路径,存在,文件 File file3 = new File("day04-code"); // 相对路径,文件夹 File file4 = new File("day04-code\\day04-code.iml"); // 相对路径,文件 File file5 = new File("D:\\WorkSpace\\xx"); // 绝对路径不存在的文件夹 File file6 = new File("D:\\WorkSpace\\xx.txt"); // 绝对路径不存在的文件 File file7 = new File("xx"); // 相对路径不存在的文件夹 File file8 = new File("xx.txt"); // 相对路径不存在的文件 System.out.println(file1.isDirectory()); // true,绝对路径存在的文件夹 System.out.println(file2.isDirectory()); // false,绝对路径存在的文件 System.out.println(file3.isFile()); // false,相对路径存在的文件夹 System.out.println(file4.isFile()); // true,相对路径存在的文件 System.out.println(file5.isDirectory()); // false,绝对路径不存在的文件夹 System.out.println(file6.isFile()); // false,绝对路径不存在的文件夹 System.out.println(file7.isDirectory()); // false,相对路径不存在的文件夹 System.out.println(file8.isFile()); // false,相对路径不存在的文件夹
创建与删除功能的方法:
public boolean creatNewFile():当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
注意:
1.此方法只能创建文件,不能创建文件夹
2.创建文件的路径必须存在,否则会抛出异常
// public boolean creatNewFile():当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。 // 创建文件的路径和名称在构造方法中给出(构造方法的参数) // 返回值是boolean值,当文件不存在会创建文件返回true,当文件已存在返回false。 File file = new File("D:\\a.txt"); try { // 该文件前的路径如果不存在或路径拒绝访问,就会抛出异常,所以需要try-catch捕捉异常或throws声明异常给调用者JVM处理 System.out.println(file.createNewFile()); // true } catch (IOException e) { e.printStackTrace(); }
public boolean delete():删除由此File表示的文件或目录。
注意:delete方法是直接在硬盘上删除文件/文件夹,不走回收站,删除要谨慎。
// public boolean delete():删除由此File表示的文件或目录。 // 已存在的文件/文件夹删除返回true,不存在的文件/文件夹返回false,文件夹中有内容,不会删除返回false File file = new File("D:\\a.txt"); // 文件 System.out.println(file.delete()); // 第一次true,第二次false File file1 = new File("D:\\a"); // 文件夹 System.out.println(file1.delete()); // 第一次true,第二次false File file2 = new File("D:\\c"); // 文件夹,里面有内容 System.out.println(file2.delete()); // false
public boolean mkdir():创建由此File表示的目录。(单级空文件夹)
public boolean mkdirs():创建由此File表示的目录,包括任何必需但不存在的父目录。(多级空文件夹)
注意事项:创建文件夹的路径和名称在构造方法中给出。创建文件夹时已存在的文件夹两个方法都返回false。创建单级文件夹时,路径不存在也返回false,创建多级不会。
// public boolean mkdir():创建由此File表示的目录。(单级空文件夹) // public boolean mkdirs():创建由此File表示的目录,包括任何必需但不存在的父目录。(多级空文件夹) File file1 = new File("D:\\a"); // 单级 System.out.println(file1.mkdir()); // 第一次true,第二次false File file2 = new File("D:\\b\\c\\d"); // 多级 System.out.println(file2.mkdir()); // false,路径不存在 System.out.println(file2.mkdirs()); // 多级,第一次true,第二次false
目录的遍历:
public String[] list():返回一个String数组,表示该File目录中所有的子文件或目录。(目录下的文件/文件夹名称)
注意:list()方法和listFiles()方法遍历的是构造方法中给出的目录。如果构造方法中给出的目录路径不存在,会抛出空指针异常;如果构造方法中给出的路径不是目录,也会抛出空指针异常。
文件夹下的隐藏文件/文件夹名称也能获取。
/* public String[] list():返回一个String数组,表示该File目录中所有的子文件或目录。 遍历构造方法中给出的目录,会获取目录中所有文件/文件夹的名称,把获取到的多个名称存储到一个String类型的数组中 */ File file1 = new File("D:\\WorkSpace"); // 文件夹 File file2 = new File("D:\\01.xlsx"); // 非文件夹,文件,无法输出数组,抛出空指针异常 File file3 = new File("D:\\aaaa"); // 路径不存在,抛出空指针异常 String[] arr = file1.list(); for (String name : arr) { System.out.println(name); } /*String[] arr2 = file2.list(); for (String name : arr2) { System.out.println(name); // NullPointerException } String[] arr3 = file3.list(); for (String name : arr3) { System.out.println(name); // NullPointerException }*/
运行截图:
public File[] listFiles():返回一个File数组,表示该File目录中的所有的子文件或目录。(目录下的文件/文件夹路径)
/* public File[] listFiles():返回一个File数组,表示该File目录中的所有的子文件或目录。 */ File file1 = new File("D:\\WorkSpace"); // 文件夹 File file2 = new File("D:\\01.xlsx"); // 非文件夹,文件,无法输出数组,抛出空指针异常 File file3 = new File("D:\\aaaa"); // 路径不存在,抛出空指针异常 File[] arr = file1.listFiles(); for (File file : arr) { System.out.println(file.toString()); // 打印的是路径 } /*File[] arr2 = file2.listFiles(); for (File file : arr2) { System.out.println(file.toString()); // NullPointerException } File[] arr3 = file3.listFiles(); for (File file : arr2) { System.out.println(file.toString()); // NullPointerException }*/
运行截图: