2013-07-19 80 views
12

我正在使用Eclipse和jdk1.7。我正在使用文件处理来制作一个基本程序,在该程序中将创建目录内的输出目录。但是,当我运行该程序时,输出显示为false,并且该目录未生成。我认为输出是错误的,因为存在一个同名的目录,但这不是原因。所以我需要帮助。这是我的代码:mkdir()未创建新目录

import java.io.File; 

public class P { 
    public static void main(String[] args) { 
     File f1 = new File ("abc"); 
     File f2 = new File (f1,"abc"); 
     System.out.println(f2.mkdir()); 
    } 
} 

它的输出是false,但尚未创建目录。 我该如何解决这个问题?这不仅仅是在这个程序中 - 我调用方法mkdir()的每个程序都有同样的问题。

+0

做 “ABC” 的存在,是一个目录?你在程序的工作目录中寻找新的目录吗? (打印新文件(“”)。getAbsolutePath()查找WD) – A4L

+1

对于诊断,请打印['f2.getAbsolutPath()'](http://docs.oracle.com/javase/7/docs/api /java/io/File.html#getAbsolutePath())。也许它试图在你没有写权限的地方创建目录? – mthmulders

+0

Java 7引入了使用异常而不是布尔返回值的Files类。这对获取未来调试失败的文本描述很有用。 –

回答

19

如果要创建多个目录,则必须使用mkDirs()。这可能也值得检查,你的canWrite()的位置,因为一些地方的许可。这两者都是对文件类

12

obj.mkdirs()

看看这个:

File f = new File("non_existing_dir/someDir"); 
System.out.println(f.mkdir()); 
System.out.println(f.mkdirs()); 

的第一次印刷就不会创建一个目录,并返回false但第二次却并返回true

1

mkdir需要抽象路径,而不是相对路径。尝试使用...

File f2 = new File (f1, "C:\\"); 

...例如。

从Java DOC:

公共布尔的mkdir()

创建此抽象路径名指定的目录。

返回:

当且仅当该目录已创建;否则为false

抛出:

SecurityException - 如果存在安全管理,并创建其SecurityManager.checkWrite(java.lang.String)方法不允许指定的目录

0

Create directory example

看起来你需要在你的路径上工作一下,因为它看起来不像File会推断“abc”。

此外,请确保您有权尝试创建目录的路径。如果你不这样做,它会失败。我已经玩了一段时间了,所以不知道你是否需要mkdir调用整个路径(即/ here /,/ here/now-here /,/ here/now-这里/最后)还是不。认为它可能是递归的,但这是值得验证的。

其实从看其他答案看起来mkdirs会递归的,mkdir不是。我会和mkdirs一起去,特别是如果输入不会从一开始就知道,否则你最终会用mkdir写一个函数来完成同样的事情。