Java实现文件以及文件夹的创建和删除

1,文件创建

/**
 * 创建指定路径文件
 *
 * @param filePath:指定路径(包括文件名的绝对路径)
 */
public static void createFile(String filePath) {
    File file = new File(filePath);
    File fileParent = file.getParentFile();

    if (!fileParent.exists()) {
        fileParent.mkdirs();
        createFile(filePath);
    } else {
        try {
            file.createNewFile();
            System.out.println("创建成功");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("文件创建异常");
        }
    }

}

2,文件的删除

/**
 * 删除指定路径的文件
 * @param filePath:带有指定文件名称的文件的绝对路径
 */
public static void recurDelete(String filePath){
    File f=new File(filePath);
    try{
        for(File fi:f.listFiles()){
            if(fi.isDirectory()){
                recurDelete(fi.getAbsolutePath());
            }
            else{
                fi.delete();
                System.out.println(fi.getAbsolutePath()+":删除成功!");
            }
        }
        f.delete();
    }
    catch(NullPointerException n){
        System.out.println("Sorry,No such file");
    }
}


  

注:

(1)这两个方法都是通过递归方式实现

(2)递归方式有一个问题,就是会出现死循环,这个时候会报如下错误:

比如我们测试创建文件的方法,传入一个根目录都不存在的路径:"Z://test.text",也就是说Z盘根本就不存在,我们是无法创建根目录的,这个时候就会出现上述错误

createFile("Z://test.txt");

我们可以查看API找找StackOverflowError,其继承至VirtualMachineError,再上一层是Error,所以它是属于Throwable下的Error分支,对于处理它的方式,我们是建议完善其他代码逻辑,而不是捕获或者抛出做一个简单的处理,因为这是一个错误,不是Exception(此处关于Throwable的相关API的知识就不多说了)。网上也有说通过修改虚拟机默认栈大小的方法,这种方式只是针对那些递归调用次数多但是不是死循环的情况,在这里肯定是不适用的。关于StackOverflowError更多了解可以查看如何解决StackOverflowError

【 参考:

VirtualMachineError:

当 Java 虚拟机崩溃或用尽了它继续操作所需的资源时,抛出该错误。

StackOverflowError :

当应用程序递归太深而发生堆栈溢出时,抛出该错误

猜你喜欢

转载自blog.csdn.net/hfut_why/article/details/82808245
今日推荐