目录
9.1 File类
通过调用File类提供的各种方法,能够创建,删除或者重命名文件,判断硬盘上某个文件是否存在,查询文件最后修改时间等
9.1.1 创建File对象
1、构造方法
在上表中,所有的构造方法都需要传入文件路径。通常来讲,如果程序只处理一个目录或文件,并且知道该目录或文件的路径,使用第一个构造方法较方便。如果程序处理的是一个公共目录中的若干子目录或文件,那么使用第二个或者第三个构造方法会更方便。
9.1.2 创建File对象案例
1 import java.io.File;
2 public class Test {
3 public static void main(String[] args) {
4 File f = new File("D:\\file\\a.txt");//使用绝对路径构造File对象
5 File f1 = new File("src\\Hello.java");//使用相对路径构造File对象
6 System.out.println(f);
7 System.out.println(f1);
8 }
9 }
9.1.3 File类常用的方法
9.1.4 方法的常见使用:
1、在磁盘下创建一层目录,并且在目录下创建文件
File fileDemo=new File("d:\\hello1\\demo.txt");
if(!(fileDemo.getParentFile().exists())){ //判断d:\demo目录是否存在
fileDemo.getParentFile().mkdir();
}
if(fileDemo.exists()){ //如果存在这个文件就删除,否则就创建
fileDemo.delete();
}else{
System.out.println(fileDemo.createNewFile());
}
}
}
2、创建临时文件
程序需要读写一些临时文件,File对象提供了createTempFile()来创建一个临时文件,以及deleteOnExit()在Jvm退出时自动删除该文件。
1 public class Example02 {
2 public static void main(String[] args) throws IOException {
3 // 提供临时文件的前缀和后缀
4 File f = File.createTempFile("itcast-", ".txt");
5 f.deleteOnExit(); // JVM退出时自动删除
6 System.out.println(f.isFile());
7 System.out.println(f.getPath());
8 }
9 }
3、遍历指定目录下的文件
1 import java.io.File;
2 public class Example03{
3 public static void main(String[] args) throws Exception {
4 // 创建File对象
5 File file = new File("D:/IdeaWorkspace/chapter07");
6 if (file.isDirectory()) { // 判断File对象对应的目录是否存在
7 String[] names = file.list (); // 获得目录下的所有文件的文件名
8 for (String name : names) {
9 System.out.println(name); // 输出文件名
10 }
11 }
12 }
13 }
4、遍历指定目录下所有扩展名为“.java”的文件
1 import java.io.File;
2 import java.io.FilenameFilter;
3 public class Example04 {
4 public static void main(String[] args) throws Exception {
5 // 创建File对象
6 File file = new File("D:/IdeaProjects/text/com/itcast");
7 // 创建过滤器对象
8 FilenameFilter filter = new FilenameFilter() {
9 // 实现accept()方法
10 public boolean accept(File dir, String name) {
11 File currFile = new File(dir, name);
12 // 如果文件名以.java结尾返回true,否则返回false
13 if (currFile.isFile() && name.endsWith(".java")) {
14 return true;
15 } else {
16 return false;
17 }
18 }
19 };
20 if (file.exists()) { // 判断File对象对应的目录是否存在
21 String[] lists = file.list(filter); // 获得过滤后的所有文件名数组
22 for (String name : lists) {
23 System.out.println(name);
24 }
25 }
26 }
27 }
5、遍历目录下的文件和子目录的文件
listFiles()方法返回一个File对象数组,当对数组中的元素进行遍历时,如果元素中还有子目录需要遍历,则需要使用递归。
1 import java.io.File;
2 public class Example05{
3 public static void main(String[] args) {
4 // 创建一个代表目录的File对象
5 File file =
6 new File("D:\\eclipseWorkspace\\JavaBasicWorkspace\\chapter07");
7 fileDir(file); // 调用FileDir方法
8 }
9 public static void fileDir(File dir) {
10 File[] files = dir.listFiles(); // 获得表示目录下所有文件的数组
11 for (File file : files) { // 遍历所有的子目录和文件
12 if (file.isDirectory()) {
13 fileDir(file); // 如果是目录,递归调用fileDir()
14 }
15 System.out.println(file.getAbsolutePath()); // 输出文件的绝对路径
16 }
17 }
18 }
6、删除文件及目录:
delete()方法只能删除一个指定的文件,假如File对象代表目录,并且目录下包含子目录或文件,则File类的delete()方法不允许对这个目录直接删除。在这种情况下,需要通过递归的方式将整个目录以及其中的文件全部删除。
递归的方式删除包含子文件的目录
1 import java.io.*;
2 public class Example07 {
3 public static void main(String[] args) {
4 File file = new File("D:\\hello\\test");
5 deleteDir(file); // 调用deleteDir删除方法
6 }
7 public static void deleteDir(File dir) {
8 if (dir.exists()) { // 判断传入的File对象是否存在
9 File[] files = dir.listFiles(); // 得到File数组
10 for (File file : files) { // 遍历所有的子目录和文件
11 if (file.isDirectory()) {
12 deleteDir(file); // 如果是目录,递归调用deleteDir()
13 } else {
14 // 如果是文件,直接删除
15 file.delete();
16 }
17 }
18 // 删除完一个目录里的所有文件后,就删除这个目录
19 dir.delete();
20 }
21 }
22 }
删除目录是从虚拟机直接删除而不放入回收站的,文件一旦删除就无法恢复,因此在进行删除操作的时候需要格外小心。