File类结构解析

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();
    }
}

你可能感兴趣的:(I-O流,java,IO,File)