File类的作用,将操作系统中的文件封装成对象,并提供相应的操作文件对象的方法。
如何将文件封装成File对象?
将文件路径传入构造方法即可File (String pathname)
,这里的pathname
对应文件的路径。File类中封装了一个String
类型的变量path
,用来存储pathname
。部分源码如下:
public class File{
private final String path;
public File(String pathname) {
if (pathname == null) {
throw new NullPointerException();
}
this.path = fs.normalize(pathname);
this.prefixLength = fs.prefixLength(this.path);
}
//省略操作该文件对象的方法。
}
通过源码可以看出,File
类与我们所学的Student
类,结构一样。回想一下Student类,封装了一个String
类型的变量name
,提供用于初始化name
的构造方法,剩下来的就是操作该属性的方法。不同的地方是,File
类内部封装了很多与操作系统交互的功能,而这点我们无需关心。
封装完成之后,接下来,只需要调用File
类的各种方法对其操作即可。
递归删除文件夹
背景:File
类的delete
方法只能删除文件或者空文件夹。
第一步,递归删除文件夹内的所有文件,得到主文件夹与子文件夹皆为空。
第二步,递归删除所有目录。
综合步骤一、二,即可删除。
public class FileTest {
public static void main(String[] args) {
File f = new File("j:/1");
deleteAll(f);
}
/**
* 综合如下步骤一、二,递归删除
* @param f
*/
public static void deleteAll(File f) {
//判断是否为文件
if(f.isFile()) {
f.delete();
return;
}
deleteAllFiles(f);//删除所有文件
deleteAllDir(f);//删除所有目录
}
/**
* 第一步,删除所有File(文件)
* @param f
* parameter
*/
private static void deleteAllFiles(File f) {
File[] fs = f.listFiles();
for (File file : fs) {
if (file.isFile())
file.delete();
else
deleteAllFiles(file);
}
}
/**
* 第二步,删除所有的Directory(目录)
* @param f
*/
private static void deleteAllDir(File f) {
File[] fs = f.listFiles();
if(fs.length==0) {
f.delete();
}
else {
for(File file: fs)
deleteAllDir(file);
}
f.delete();
}
}