createnewfile
问题
在学习对硬盘文件操作类File时我们会遇到如下的情况:
我们来创建一个新文件:
public class FileTest {
public static void main(String[] args) {
testOfcreatenewfile();//报错
}
public static void testOfCreateNewFile(){
File file = new File("D:\\javaspace\\study.txt");
boolean isNewFile = false;
isNewFile = file.createNewFile();//报错
System.out.println(isNewFile);
}
编译器一般会报错:Unhandled exception: java.io.IOException,意思是没有进行IO异常的处理。这里我们很奇怪?我们的代码语法上是没有错误的为什么编译不通过?我们其实忽略了方法中潜在的异常:如果路径中的javaspace目录不存在呢?或者说在多线程文件被中途删除了呢?所以系统会提示我们去处理或者抛出这个异常,我的博客里有一篇博客专门讲了如何去处理这个异常,这里我们简单的写书正确处理异常的代码即可:
public static void testOfCreateNewFile(){
File file = new File("D:\\javaspace_idea\\texture\\study.txt");
boolean isNewFile = false;
try {
isNewFile = file.createNewFile();
} catch (IOException e) {
e.printstacktrace();
} finally {
}
System.out.println(isNewFile);
}
然后我们再来看看创建目录的过程:
public class FileTest {
public static void main(String[] args) {
testOfmkdirs();
}
public static void testOfMkdirs(){
File file = new File("D:\\a\\b\\c");
boolean isMadirs;
isMadirs = file.mkdirs();
System.out.println(isMadirs);
}
这里编译器是可以编译通过的,没有要求我们对异常进行处理,那你可能问了,如果父路径中a、b文件夹不存在的话不是类似于上述的创建文件出现的IO异常吗?这个问题是值得我们去深究的。
解释
首先我们查询一下官方的文档:
官方文档中的createNewFile方法中标注的需要抛出异常的,但是mkdirs是没有标注的,其实到这里我们就可以解决这个问题了,但是我们想知道它到底为什么不需要抛出异常,这里我们就需要看mkdirs方法到底是如何实现的。所以我们打开了File类中的mkdirs方法:
//File中mkdirs的实现
public boolean mkdirs() {
if (exists()) {
return false;
}
if (mkdir()) {//【1】
return true;
}
File canonFile = null;
try {//【2】
canonFile = getcanonicalFile();
} catch (IOException e) {
return false;
}
File parent = canonFile.getParentFile();
return (parent != null && (parent.mkdirs() || parent.exists()) &&
canonFile.mkdir());//【3】
}
这里我们不去完整解释这个代码的意思,我们从三个地方来看看:首先【1】中出现了mkdir()方法,我们知道mkdir和mkdirs的区别就是s可以在父目录不存在的情况下创建父目录,而mkdir是不行的,这说明mkdirs和mkdir是有关系的。再来看【2】是一个对异常的处理,也许到这里你可以大致明白为什么mkdirs不用抛出异常了吧,因为方法内部已经对异常进行了处理。这里还选了第三个地方进行解释【3】:我们奇怪为什么mkdirs能创建父目录,其实这里出现的mkdir迭代已经说明问题,mkdirs中其实在父目录不存在的时候会进行判断,然后迭代mkdir来创建父目录,直至它存在,所以总结下来这个方法是不需要处理异常的。
相关阅读
关于FileInputStream 它用于读取本地文件中的字节数据,继承自InputStream类,由于所有的文件都是以字节为向导,因此它适用于操
-bash: ls: No such file or directory 错误的原因及
ubuntu出现如下错误: { Welcome to Ubuntu 16.04.5 LTS (GNU/Linux 4.15.0-42-generic x86_64) * Documentation: https://help.
No input file specified. phpStudy nginx报错解决方
No input file specified. phpStudy nginx报错解决方案 排查1:检查这个目录是否存在,路径是否错误 排查2:vhost.conf配置文件 serv
在我们写的程序当中,总有一些配置信息需要保存下来,以便完成程序的功能,最简单的办法就是将这些信息写入INI文件中,程序初始化时
CreateFile函数详解 CreateFile 函数创建或打开下列对象,并返回一个可以用来访问这些对象的句柄。 文件 pipes 邮槽 通信