为什么Java mkdirs不能正常工作?

时间:2014-03-30 21:41:46

标签: java file

我写了一些代码来在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 "";
}

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

在Explorer的预期根路径上,它显示为C:\Users\Juan Manuel\Clientes

2 个答案:

答案 0 :(得分:1)

根据文档,只有在抛出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 (...)

答案 1 :(得分:1)

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

如果您确定它没有进入您的异常处理部分,那意味着Java创建文件位于磁盘中的某个位置,而不是在C:\ Users \ Juan Manuel \ Clientes下。 尝试打印“文件夹”文件路径的绝对路径,看看它是否已经存在。

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

另外,尝试使用正确的文件创建,如Boris所提到的,我知道你的调用会起作用(因为我也使用它),但是使用File(path,filename);更明确,更不容易出错。

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

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