按理来说,不管生成文件或者文件夹,都会有同名文件或文件夹已存在的风险,因此都应该抛出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());
}
5 个解决方案
#1
有一点createNewFile()并不是因为文件存在而发生io异常,io异常是由本地方法在创建文件时所发生的,可以去了解一下c创建文件以及文件夹的机制
#2
和path有关,你可以试下,path= C:/和path=c:/cs.txt
#3
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
找不到路径我就一直创建
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
找不到路径我就一直创建
#4
同意楼上!
#5
老兄,我最近也刚好碰到你这个问题,debug了很久,最后才发现:
1.可能是路径问题。
*2.可能是你之前对目录调用了createNewFile,如dir="C:/dir";dir.createNewFile().
这样,就生成了一个没有类型的文件dir,然后你在dir文件下建立文件“a.txt”,那肯定会报not a directory错误。
因为dir是没有类型的 文件而不是 文件夹。
因此,你不该对 文件夹路径调用createNewFile,这样会带来隐藏的问题。
1.可能是路径问题。
*2.可能是你之前对目录调用了createNewFile,如dir="C:/dir";dir.createNewFile().
这样,就生成了一个没有类型的文件dir,然后你在dir文件下建立文件“a.txt”,那肯定会报not a directory错误。
因为dir是没有类型的 文件而不是 文件夹。
因此,你不该对 文件夹路径调用createNewFile,这样会带来隐藏的问题。
#1
有一点createNewFile()并不是因为文件存在而发生io异常,io异常是由本地方法在创建文件时所发生的,可以去了解一下c创建文件以及文件夹的机制
#2
和path有关,你可以试下,path= C:/和path=c:/cs.txt
#3
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
找不到路径我就一直创建
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
找不到路径我就一直创建
#4
同意楼上!
#5
老兄,我最近也刚好碰到你这个问题,debug了很久,最后才发现:
1.可能是路径问题。
*2.可能是你之前对目录调用了createNewFile,如dir="C:/dir";dir.createNewFile().
这样,就生成了一个没有类型的文件dir,然后你在dir文件下建立文件“a.txt”,那肯定会报not a directory错误。
因为dir是没有类型的 文件而不是 文件夹。
因此,你不该对 文件夹路径调用createNewFile,这样会带来隐藏的问题。
1.可能是路径问题。
*2.可能是你之前对目录调用了createNewFile,如dir="C:/dir";dir.createNewFile().
这样,就生成了一个没有类型的文件dir,然后你在dir文件下建立文件“a.txt”,那肯定会报not a directory错误。
因为dir是没有类型的 文件而不是 文件夹。
因此,你不该对 文件夹路径调用createNewFile,这样会带来隐藏的问题。