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类概述和构造方法的练习
xxxxxxxxxx
package 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类创建功能的练习
xxxxxxxxxx
package 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类判断和获取功能的练习
xxxxxxxxxx
package 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类删除功能的练习
xxxxxxxxxx
package 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
}
}