将通过以下四小题来展开文件操作的入门。
实验内容:
1、编写File类,创建文件、删除文件、判断文件是否存在、打印文件全路径。
package com.wxy.shiyanliu;
import java.io.File;
import java.io.IOException;
public class Test1 {
public static void main(String[] args) throws IOException {
File file1 = new File("D:\\test\\test.txt");
boolean isExists = false;
//创建文件夹
// file1.mkdir();
//创建文件
file1.createNewFile();
isExists = file1.exists();
System.out.println(isExists?"该文件存在":"该文件不存在");
System.out.println("该文件的完整路径如下");
System.out.println(file1.getPath());
//删除文件,deleteOnexists将在程序执行结束后和JVM终止时才删除文件,只做声明
//而delete()则是直接删除
file1.delete();
System.out.println("经过删除操作之后");
isExists = file1.exists();
System.out.println(isExists?"该文件存在":"该文件不存在");
}
}
运行效果如下:
2. 编写File类,创建目录、删除目录、判断是否是目录、打印目录的全路径。
package com.wxy.shiyanliu;
import java.io.File;
public class Test2 {
public static void main(String[] args) {
File file2 = new File("D:\\test2");
boolean isExists = false;
//创建目录
isExists = file2.mkdir();
//System.out.println(isExists);
//判断是否为目录
isExists = file2.isDirectory();
System.out.println(isExists?"是目录":"不是目录");
//打印目录全路径
System.out.println("该文件夹的全路径是" + file2.getPath());
//删除目录
isExists = file2.delete();
System.out.println(isExists?"删除成功!":"删除失败");
}
}
运行效果如下:
3.编写程序遍历目录。
package com.wxy.shiyanliu;
import java.io.File;
public class Test3 {
public static void traverse(File files){
for(String fileName: files.list()){
File file = new File(files.getPath() + "\\" + fileName);
if (file.isDirectory()){
System.out.println("是一个文件夹:" + file.getName());
traverse(file);
}
else if (file.isFile()){
System.out.println("是一个文件:" + file.getName());
}
}
}
public static void main(String[] args) {
File file = new File("D:\\test1");
traverse(file);
}
}
运行效果如下:
4. 编写程序删除多级目录。
package com.wxy.shiyanliu;
import java.io.File;
public class Test4 {
public static void traverse(File files){
String str = "";
for(String file: files.list()){str += (file+" ");}
System.out.println("本次需要操作的文件有" + str + "\n" + "-------------------------------------");
for(String fileName: files.list()){
File file = new File(files.getPath() + "\\" + fileName);
if (file.isDirectory()){
System.out.println("是一个文件夹:" + file.getName());
traverse(file);
file.delete();
System.out.println("已经删除该文件夹" + file.getName());
}
else if (file.isFile()){
System.out.println("是一个文件:" + file.getName());
file.delete();
System.out.println("已经删除该文件" + file.getName());
}
}
}
public static void main(String[] args) {
File file = new File("D:\\test1");
traverse(file);
}
}
运行效果如下:
实验分析:
1,2题是对文件以及文件夹的的一些基本操作,需要先用file对象绑定一个目录,而此时并不会将该文件创建,而是在使用方法如mkdir()时,才可以把该文件创建出来。在遍历文件中,采用的是一个递归的思想,核心则是文件夹操作的list()方法,可以将该文件夹中的文件名称列出来(都不能列出子文件夹的子文件夹),所以我们需要通过拼接路径加文件名的方式,还需要判断每个文件是文件夹还是文件,如果是文件夹的是则需要递归调用该方法,继续执行以上操作,如此下来就可以完成对该文件夹下所有的文件进行遍历,如果要删除文件,则只需要在遍历的时候增加删除操作即可。
实验总结:
有一点需要注意的是发现删除文件后,使用exists()方法发现该文件仍旧存在
解决方法:删除文件时使用了deleteOnexists(),而该方法将在程序执行结束后和JVM终止时才删除文件,只做声明。而delete()则是直接删除,所以此处改用delete()方法。
如图,可以达到效果。