File
File概述
- 存在于软件包java.io中,使用时需要导包
- public class File extends Object implements Serializable,Comparable< File > 是具体的类,实现了两个接口。comparable是自然排序的接口,compareTo方法是自然比较方法;Serializable是类序列化接口,实现该接口的类都可序列化
- 是文件和目录路径名的抽象表示
=①文件和目录是可以通过File封装成对象
=②对于File而言,其封装的并不是一个真正存在的文件,仅仅是一个路径名而已。它可以是存在的,也可以是不存在,将来是要通过具体的操作把这个路径的内容转换为具体存在的。
构造方法
方法名 | 说明 |
---|---|
File(String pathname) | 通过将给定的路径名字符串转换为抽象路径名来创建新的File实例 |
File (String parent,String child) | 从父路径名字符串和子路径名字符串创建新的File实例 |
File (File parent,String child) | 从父抽象路径名和子路径名字符串创建新的File实例 |
案例:
// 222
public class FileDemo {
public static void main(String[] args) {
// File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的File实例
File f = new File("E:\\222\\test.txt");
System.out.println(f);
// E:\222\test.txt 这个路径名字符串 其中文件夹222 存在,文件test.txt文件不存在,但是不报错,说明是抽象路径,文件不存在也不会报错。
// 使用System.out.println 发现输出内容不是@形式的内容,说明File类中重写了toString方法
// File (String parent,String child)从父路径名字符串和子路径名字符串创建定的File实例
File f2 = new File("E:\\222","test.txt");
System.out.println(f2);
//E:\222\test.txt
// File (File parent,String child) 从父抽象路径名和子路径名创建File实例。
File f3 = new File("E:\\222");
File f4 = new File(f3,"test.txt");
System.out.println(f4);
// E:\222\test.txt
}
}
File类创建功能
方法名 | 说明 |
---|---|
public boolean createNewFile() | 当具有该名称的文件不存在时,创建一个由该抽象路径名命名的新空文件 |
public boolean mkdir() | 创建由此抽象路径命名的目录 |
public boolean mkdirs() | 创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录 |
案例:
// 222
public class FileDemo2 {
public static void main(String[] args) throws IOException {
// 创建file对象,将路径字符串封装成file类对象
File f = new File("E:\\222\\test.txt");
System.out.println(f.createNewFile());
//如果文件不存在,就创建文件,返回true
// 如果文件存在,就不创建文件,返回false
// 创建目录
File f2 = new File("E:\\222\\JavaSE");
System.out.println(f2.mkdir());
// 如果目录不存在,就创建目录,返回true
// 如果目录存在,就不创建目录,返回false
// 创建多级目录 E:\\222\\javawbe\\html 其中javawbe、html目录都不存在,
File f3 = new File("E:\\222\\javawbe\\html");
System.out.println(f3.mkdirs());
// 使用文件对象.mkdir()不能创建多级目录
}
}
理解xhj:
①创建文件就使用createNewFile方法、创建目录就使用mkdir或者mkdirs。不能根据字符串路径是否带有文件类型后缀去判断是创建文件还是目录;
②当目录下已经存在同名目录时,不能在该目录下创建同名文件。
当某目录下存在文件xx.doc时,不能再创建目录名是xx.doc的目录。
File类的判断和获取功能
方法名 | 说明 |
---|---|
public boolean isDirectory() | 测试此抽象路径名表示的File是否为目录 |
public Boolean isFile() | 测试此抽象路径名表示的File是否为文件 |
public boolean exists() | 测试此抽象路径名表示的File是否存在 |
public String getAbsolutePath() | 返回此抽象路径名的绝对路径名字符串 |
public String getPath() | 将此抽象路径名转化为路径名字符串 |
public String getName() | 返回由此抽象路径名表示的文件或目录的名称 |
public String[] list() | 返回此抽象路径名表示的目录中的文件和目录的名称字符串数组 |
public File[] listFiles() | 返回此抽象路径名表示的目录中的文件和目录的File对象数组 |
代码:
// 222
public class FileDemo3 {
public static void main(String[] args) {
//创建File对象
File f = new File("idea_test2\\src\\itheima222\\java");
System.out.println(f.isDirectory());//false 是否目录
System.out.println(f.isFile());//true 是否文件
System.out.println(f.exists());//true 是否存在
System.out.println(f.getAbsolutePath()); // 绝对路径
// 绝对路径 D:\9.14\工作准备\java准备\java基础黑马程序员\代码\javaSE_Code\idea_test2\src\itheima222\java
System.out.println(f.getPath()); // 抽象路径转化为路径字符串
// 返回抽象路径转换的路径字符串 idea_test2\src\itheima222\java
System.out.println(f.getName()); // 抽象路径表示的文件或目录的名字
// 返回抽象路径所表示的文件或目录的名称 java
System.out.println("--------------");
File f2 = new File("E:\\222");
String[] pathArr = f2.list(); // 返回抽象目录中包含的文件和目录的名称字符串数组
for(String str : pathArr){
System.out.println(str);
}
// 输出值是:JavaSE javawbe test.txt
// 前两个是目录 后一个文件
System.out.println("-------------");
// 文件.listFiles存在的原因之一:返回抽象对象所表示的file对象数组 可以调用isFile和isDirectory判断
File[] fileArr = f2.listFiles();// 返回抽象目录中包含的文件和目录的file对象数组
for(File fi : fileArr){
if(fi.isDirectory()){
System.out.println(fi.getName());
}
}
// 输出内容是:E:\222\JavaSE E:\222\javawbe E:\222\test.txt
// 加了if条件判断后输出:JavaSE javawbe
}
}
File类删除功能
方法名 | 说明 |
---|---|
public boolean delete() | 删除由此抽象路径名表示的文件或目录 |
绝对路径和相对路径
名称 | 说明 |
---|---|
绝对路径 | 完整的路径名,不需要任何其他信息就可以定位它所表示的文件。 例如:E:\228\java.txt |
相对路径 | 必须使用取自其他路径名的信息进行解释。 例如:idea_test2\java228.txt |
// 228
public class FileDeleteDemo {
public static void main(String[] args) throws IOException {
// File f1 = new File("E:\\228\\java1.txt");
// 如果在写上述内容的时候,不小心少写了E:\\228\\ 这时java1.txt会创建在项目的目录下,即在javaSE_Code 目录下
/* File f2 = new File("java228.txt");
System.out.println(f2.createNewFile());*/
//要想创建文件在模块的目录下,idea_test2(模块)下
// 需求1:在当前模块目录下创建java1.txt文件
File f2 = new File("idea_test2\\java1.txt");
// System.out.println(f2.createNewFile());
// 需求2:删除当前模块目录下的java.txt文件
// System.out.println(f2.delete());
// 返回值是true,说明已经完成删除。
System.out.println("---------------");
// 需求3:在当前模块目录下创建testxhj目录
File f3 = new File("idea_test2\\testxhj");
// System.out.println(f3.mkdir());
// 返回值是true,说明创建成功。
// 需求4:删除当前目录下的testxhj目录
// System.out.println(f3.delete());
// 返回值是true,说明删除成功。
// 需求5:在当前模块下创建一个目录 testxhj,在该目录下再创建一个文件 java.txt
File f4 = new File("idea_test2\\testxhj");
// System.out.println(f4.mkdir());
File f5 = new File("idea_test2\\testxhj\\java.txt");
// System.out.println(f5.createNewFile());
// 返回true,说明创建成功。
// 问题:如果在创建文件前,其上级目录不存在,则会报异常,系统找不到指定的目录。
// 需求6:删除需求5创建的目录testxhj
// 问题:如果要删除的目录中有文件,需要先删除文件,然后才可以删除目录;
// System.out.println(f4.delete());
//返回false,说明删除没有成功。 直接删除目录
System.out.println(f5.delete());
System.out.println(f4.delete());
// 返回true 删除成功
}
}
总结
如果一个目录中有内容(目录、文件),不能直接删除,应该先删除目录中的内容,最后才能删除目录。
创建一个文件的时候,如果它的上级目录不存在,会报异常,系统找不到指定的目录。报错类型是:java.io.IOException