请问为什么IO中生成文件createNewFile()会抛出
IOException而生成文件夹mkdir()却不会?
请问为什么生成新文件会抛出IOException而文件夹却不会呢?
按理来说,不管生成文件或者文件夹,都会有同名文件或文件夹已存在的风险,因此都应该抛出IOException啊?
以下是源代码:
public boolean createNewFile() throws IOException {
SecurityManager security = System.getSecurityManager();
if (security != null) security.checkWrite(path);
return fs.createFileExclusively(path, false);
}
public boolean mkdirs() {
if (exists()) {
return false;
}
if (mkdir()) {
return true;
}
File canonFile = null;
try {
canonFile = getCanonicalFile();
} catch (IOException e) {
return false;
}
File parent = canonFile.getParentFile();
return (parent != null && (parent.mkdirs() || parent.exists()) &&
canonFile.mkdir());
}
------解决方案--------------------有一点createNewFile()并不是因为文件存在而发生io异常,io异常是由本地方法在创建文件时所发生的,可以去了解一下c创建文件以及文件夹的机制
------解决方案--------------------createNewFile() 时可能它的某个父文件夹不存在 比如c:/a/b/1.txt 如果C盘下没有一个文件夹叫 a 的话,就会抛如下异常:
Exception in thread "main"
java.io.IOException: 系统找不到指定的路径。
at java.io.WinNTFileSystem.createFileExclusively(Native Method)
at java.io.File.createNewFile(File.java:883)
at cn.test.Ts.main(Ts.java:13)
因为这个Native Method没有创建父文件夹的功能
为了创建这个文件 就要调用 someFile.getParentFile().mkdirs()方法
然后就能创建 因为是mkdirs()方法会递归的调用自身:“&& (parent.mkdirs() " ,直到要创建的文件夹的父文件夹存在:
if (mkdir()) { return true; }
所以不会发生找不到路径的情况 就不需要抛ioexception
找不到路径我就一直创建