File类概述和构造方法
该类在java.io包下。该类是一个具体的类,继承了Object类,实现类2个接口分别是Serializable接口、Comparable
该类是文件和目录路径名的抽象表示,这句话其实包含了2个意思,如下 1、文件和目录是可以通过File封装成对象的 2、对于File类而言,其封装的并不是一个真正存在的文件,仅仅是一个路径名而已。它可以是存在的,也可以是不存在的。将来是要通过具体的操作把这个路径的内容转换为具体存在的
该类有四个构造方法,即该类来创建对象的方法有四个,如下
| 构造方法 | 描述 |
|---|---|
| File(File parent,String child) | 从父抽象路径名和子路径名字符串创建新的File实例 |
| File(String pathname) | 通过将给定的路径名字符串转换为抽象路径名来创建新的File实例 |
| File(String parent,String child) | 从父路径名字符串和子路径名字符串创建新的File实例 |
| File(URI uri) | 通过将给定的file:URI转换为抽象路径名来创建新的File实例 |
File类概述和构造方法的练习
xxxxxxxxxxpackage ch18;
import java.io.File;
//注意写的时候要把\写为\\。其实\\就是\,只是写法不同,在代码里要写成\\public class a_1_1测试 {
public static void main(String[] args) {
//1、File(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的File实例 File f1 = new File("D:\\huanf\\java\\src\\java.txt");//注意java.txt文件没有提前创建好 System.out.println(f1);//输出D:\huanf\java\src\java.txt。说明上面那行的pathname仅仅是抽象路径的表示形式,并不要求该文件一定要存在 //因为上面那行输出了路径名的内容,所以说File类重写了toString方法
//-------------------------------------------------------------------------------------------------------------------
//2、File(String parent,String child) 从父路径名字符串和子路径名字符串创建新的File实例 File f2 = new File("D:\\huanf\\java\\src","java.txt");//注意java.txt文件没有提前创建好 System.out.println(f2);//输出D:\huanf\java\src\java.txt。说明上面那行的pathname仅仅是抽象路径的表示形式,并不要求该文件一定要存在 //因为上面那行输出了路径名的内容,所以说File类重写了toString方法
//-------------------------------------------------------------------------------------------------------------------
//3、File(File parent,String child) 从父抽象路径名和子路径名字符串创建新的File实例 File f3 = new File("D:\\huanf\\java\\src");//先创建File对象,因为上面那行的那个构造方法需要的其中一个参数就是File对象 //现在才是通过第三种构造方法创建新的File实例 File f4 = new File(f3,"java.txt"); System.out.println(f4);//输出D:\huanf\java\src\java.txt
//-------------------------------------------------------------------------------------------------------------------
//总结: 在后续的学习中,如果需要指向一个文件的时候,就可以使用上面那三个构造方法
}
}
File类创建功能
| 方法名 | 说明 |
|---|---|
| public boolean createNewFile() | 当具有该名称的文件不存在时,创建一个由该抽象路径名命名的新空文件 |
| public boolean mkdir() | 创建由此抽象路径名命名的路径 |
| public boolean mkdirs() | 创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录。即可创建多级目录 |
File类创建功能的练习
xxxxxxxxxxpackage ch18;
import java.io.File;import java.io.IOException;
public class a_2_1测试 {
//下面那行的throws IOException是用来处理13行的异常,快捷键就可以生成 public static void main(String[] args) throws IOException {
//需求1:在 D:\huanf\java\src\ch8_储物区 目录下创建一个文件java.txt File f1 = new File("D:\\huanf\\java\\src\\ch18_ch19_储物区\\java.txt");//先把路径封装成File对象 System.out.println(f1.createNewFile());//createNewFile方法创建文件。报红线的话按Alt+Enter,选Add....,就可以处理异常了 //上面那行输出true则已创建好java.txt文件。再次执行就会返回false,因为该文件已经存在
//需求2:在 D:\huanf\java\src\ch8_储物区 目录下创建一个目录JavaSE System.out.println("----------------------"); File f2 = new File("D:\\huanf\\java\\src\\ch18_ch19_储物区\\JavaSE");//先把路径封装成File对象 System.out.println(f2.mkdir()); //上面那行输出true则已创建好JavaSE目录。再次执行就会返回false,因为该目录已经存在
//需求3:在 D:\huanf\java\src\ch8_储物区 目录下创建一个多级目录JavaWEB\HTML System.out.println("----------------------"); File f3 = new File("D:\\huanf\\java\\src\\ch18_ch19_储物区\\JavaWEB\\HTML");//先把路径封装成File对象 System.out.println(f3.mkdirs()); //上面那行输出true则已创建好JavaWEB\HTML目录。再次执行就会返回false,因为该多级目录已经存在
//需求4:在 D:\huanf\java\src\ch8_储物区 目录下创建一个文件javase.txt File f4 = new File("D:\\huanf\\java\\src\\ch18_ch19_储物区\\javase.txt");//先把路径封装成File对象 System.out.println(f4.mkdir());//本来txt结尾我们应该是创建文件,但是这里却使用的是mkdir创建目录 //上面那行的结果是产生一个目录,而不是文件。结论:不能根据路径名判断它是目录还是文件,需要看具体调用的是哪个方法 //注意:如果此时我们想创建文件,且在已有同名字的目录的情况下创建同名字的目录,会返回false则创建失败。不区分文件还是目录,不允许重名。如下 System.out.println(f4.createNewFile());//即使一个是目录,一个是文件,也不允许出现重名,所以这行false无法创建文件
}
}
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对象数组 |
File类判断和获取功能的练习
xxxxxxxxxxpackage ch18;
import java.io.File;
public class a_3_1测试 {
public static void main(String[] args) {
//创建File对象。注意java.txt文件我们已经在上一节课创建好了 File f = new File("D:\\huanf\\java\\src\\ch18_ch19_v储物区\\java.txt");
//public boolean isDirectory() 测试此抽象路径名表示的File是否为目录 System.out.println(f.isDirectory());//由于java.txt是文件,不是目录,所以返回的是false
//public boolean isFile() 测试此抽象路径名表示的File是否为文件 System.out.println(f.isFile());//由于java.txt是文件,所以返回的是true
//public boolean exists() 测试此抽象路径名表示的File是否存在 System.out.println(f.exists());//由于java.txt文件是存在的,所以返回true System.out.println("---------------------------");
//----------------------------------------------------------------------------------------------------------------
//public String getAbsolutePath() 返回此抽象路径名的绝对路径名字符串 System.out.println(f.getAbsolutePath());
//public String getPath() 将此抽象路径名转换为路径名字符串 System.out.println(f.getPath());
//public String getName() 返回由此抽象路径名表示的文件或目录的名称 System.out.println(f.getName()); System.out.println("---------------------------");
//-----------------------------------------------------------------------------------------------------------------
//下面的方法需要的是目录,所以我们需要创建一个File对象来指向一个目录,如下 File f2 = new File("D:\\huanf\\java\\src\\ch18_ch19_储物区");
//public String[] list() 返回此抽象路径名表示的目录中的文件和目录的名称字符串数组 String[] str = f2.list(); //右边得到的是字符串数组,赋值给str //遍历数组 for (String s : str){ System.out.println(s); } System.out.println("-------------------------");
//返回此抽象路径名表示的目录中的文件和目录的File对象数。比如下面的需求就是典型的应用场景 //如何只得到该路径下所有的文件名,不需要输出目录名呢。需要先得到对象数组,再对对象进行判断,如下 File[] object = f2.listFiles(); //右边得到的是对象数组,赋值给object //遍历数组 for (File o : object){ //判断是否是文件 if (o.isFile()){ System.out.println(o.getName());//输出所有文件名 } } //分析:File方法和listFiles方法的区别。上面的40行的File方法得到的是字符串,而字符串无法调用getName方法, //所以在49行,我们使用了listFiles方法,该方法返回的是对象,可以进行调用getName方法的操作
}}
File类删除功能
删除目录时的注意事项:如果一个目录中有内容,则不能直接删除。应该先删除目录中的内容,最后才删除目录
| 方法名 | 说明 |
|---|---|
| public boolean delete() | 删除由此抽象路径名表示的文件或目录 |
绝对路径和相对路径的区别 1、绝对路径:完整的路径名,不需要任何其他信息就可以定位它所表示的文件,例如D:\huanf\java\src\ch18_储物区\java2.txt 2、相对路径:必须使用其取自其他路径名的信息进行解释。例如:src\java2.txt
File类删除功能的练习
xxxxxxxxxxpackage ch18;
import java.io.File;import java.io.IOException;
public class a_4_1测试 {
//下面那行的throws IOException是14行快捷键产生的,当然也可以手写 public static void main(String[] args) throws IOException {
//创建对象 //File f1 = new File("D:\\huanf\\java\\src\\ch18_储物区\\java2.txt"); //File f1 = new File("java2.txt");//如果不指定具体路劲,17行就会创建一个跟java目录同级的文件 //如果让这个文件创建在java目录里面呢,即跟src同级,如下 File f1 = new File("java\\java2.txt"); //这种路径叫相对路径 //创建文件 System.out.println(f1.createNewFile());//选中createNewFile,按Alt+Enter,选Add...。就可以抛出异常,解决红线报错
//-------------------------------------------------------------------------------------------------------------------
//需求:删除当前模块目录下的java2.txt文件。注意上面那里我们用代码创建了java2.txt文件 System.out.println(f1.delete()); System.out.println("---------------------------");
//-------------------------------------------------------------------------------------------------------------------
//需求:在当前模块(即java目录)下创建test目录 File f2 = new File("java\\test"); System.out.println(f2.mkdir());
//需求:删除当前模块下的test目录 System.out.println(f2.delete()); System.out.println("---------------------------");
//------------------------------------------------------------------------------------------------------------------
//需求:在当前模块下创建一个目录test2,然后在test目录下创建一个文件jav.txt //因为上面要做两件事情,所以我们要创建两个File对象,如下 File f3 = new File("java\\test2"); System.out.println(f3.mkdir()); File f4 = new File("java\\test2\\java.txt");//注意必须要先创建test2目录,不然会报异常错误 System.out.println(f4.createNewFile());
//需求:删除当前模块(即java目录)的test目录 //System.out.println(f3.delete());//返回false,即删不掉,因为test2里面还有java.txt文件 //要删除该目录必须先删除该目录里面的文件,如下 System.out.println(f4.delete());//返回true //然后再删目录,才能删掉 System.out.println(f3.delete());//返回true
}}