【问题标题】:File.mkdirs() doesn't work all the timeFile.mkdirs() 并非一直有效
【发布时间】:2015-04-16 11:55:39
【问题描述】:

我正在尝试使用File.mkdirs() 创建一个目录。但是,它的行为似乎很奇怪:有时它会创建目录,但其他时候,它会默默地忽略目录的创建。

之前我使用 mkdir() 但在其中一篇文章中,我读到使用 mkdirs() 可以解决问题。然而,似乎没有。有什么帮助吗?

此代码在 Windows 机器上运行。

代码:

File myDir = new File(dirPath);

try{
      myDir.mkdirs();
   } 
   catch(Exception e) {
        e.printStackTrace();
   }

【问题讨论】:

  • 你确定没有任何异常?
  • dirPath 中有什么内容?还要检查stackoverflow.com/questions/12126987/…
  • 有很多原因可能不起作用,比如没有适当的安全权限
  • 如果他没有安全权限SecurityException将被抛出:如果安全管理器存在并且它的SecurityManager.checkRead(java.lang.String)方法不允许验证存在命名目录和所有必要的父目录;或者如果 SecurityManager.checkWrite(java.lang.String) 方法不允许创建命名目录和所有必要的父目录

标签: java


【解决方案1】:

a) 你应该检查 mkdirs 返回值;如果没有创建错误的目录

b) 最好使用 1.7 的 java.nio.file.Files.createDirectories 来创建所有目录或抛出异常并解释失败的原因

【讨论】:

    【解决方案2】:

    根据mkdirs()File API签名是

    公共布尔 mkdirs()

    所以你只需要检查目录是否已经创建...

    File myDir = new File(dirPath);
    
    try{
          if (!myDir.mkdirs()) {
              // error here
          }
       } 
       catch(Exception e) {
            e.printStackTrace();
       }
    

    【讨论】:

      【解决方案3】:

      它不是静默的。根据documentation

      mkdirs returns true if and only if the directory was created; false otherwise
      

      【讨论】:

        猜你喜欢
        • 2013-08-15
        • 1970-01-01
        • 1970-01-01
        • 2018-02-14
        • 2018-03-12
        • 1970-01-01
        • 2023-03-27
        • 1970-01-01
        • 2017-10-11
        相关资源
        最近更新 更多