我编写了一些代码来在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,但对于其他情况,它不会返回异常。