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 :
当应用程序递归太深而发生堆栈溢出时,抛出该错误
】