为什么 Java mkdirs 不能正常工作



我编写了一些代码来在Windows下运行的Java应用程序中创建文件夹。它不会创建文件夹,但不会进入异常状态。

public static String createFolders(String client) {
    File folder = new File("/Users/Juan Manuel/Clientes/"+client);
    if (!folder.exists()) {
        try {
            folder.mkdirs();
            new File(folder.getPath()+"/IMSS").mkdir();
            new File(folder.getPath()+"/SAT").mkdir();
            new File(folder.getPath()+"/Finanzas").mkdir();
            new File(folder.getPath()+"/Otros").mkdir();
        }
        catch (Exception e) {
            return e.toString();
        }
    }
    return "";
}

我使用返回值来检查是否有任何错误,但我得到了""返回,所以它至少通过。

在资源管理器的预期根路径中,它显示为C:UsersJuan ManuelClientes

根据文档,只有在抛出SecurityException时,您才会看到异常。如果代码由于任何其他原因无法创建文件夹,则代码不会检测到它,因为它会忽略返回代码。

按如下方式更改方法以注意错误:

try {
     if (!folder.mkdirs()) {
         return "root";
     }
     if (!(new File(folder.getPath()+"/IMSS").mkdir())) {
         return "IMSS";
     }
     if (!(new File(folder.getPath()+"/SAT").mkdir())) {
         return "SAT";
     }
     if (!(new File(folder.getPath()+"/Finanzas").mkdir())) {
         return "Finanzas";
     }
     if (!(new File(folder.getPath()+"/Otros").mkdir())) {
         return "Otros";
     }
} catch (...)
我没有

在MS Window OS中运行您的代码,但我不确定c:\Users~是否等同于Java中的/Users~。

如果你确定它没有进入你的异常处理部分,这意味着Java在你的磁盘的某个地方创建文件,而不是在C:\Users\Juan Manuel\Clientes下。尝试打印"文件夹"文件路径的绝对路径,并查看它是否已经存在。

所以在 catch 语句中。 执行 e.printStackTrace(); 首先,如果调用 createFolder() 的程序不打印返回字符串,则不要返回错误消息。检查 e.toString() 有时并不能完美地找出根本原因。

另外,尝试使用鲍里斯提到的正确的文件创建,我知道您的调用会起作用(因为我也在使用它),但是使用 File( 路径,文件名); 更明确且不易出错。

最后,检查文件类的JavaDoc http://docs.oracle.com/javase/7/docs/api/java/io/File.html#File(java.lang.String)

当给定路径为 null 时,它将返回 NPE,但对于其他情况,它不会返回异常。

相关内容

  • 没有找到相关文章

最新更新