[英]Trouble with creating a new folder in Windows using Java
已建立事实:应用程序不需要与平台无关。
我一直坐在这里一段时间,我不知道为什么这会给我带来如此多的问题。 我想要做的是:
1)检查文件是否存在
2)如果它不存在,创建它然后让我知道
3)如果它确实存在,不要试图写它,只是什么也不做,让我知道
String pathToChange = "C:/Program Files/WOTA".replace("/", "\\");
JOptionPane.showMessageDialog(rootPane, pathToChange);
File file = new File(pathToChange);
if (!file.exists()) {
file.mkdirs();
if (file.mkdir()) {JOptionPane.showMessageDialog(rootPane, "C:/Program Files/WOTA was created."); }
else { JOptionPane.showMessageDialog(rootPane, "Did not create.");
}
}
我不知道为什么但这给了我很多麻烦,但确实如此。 哦,你会注意到我正在弹出一个JOptionPanel(Dialog),其中包含它正在尝试创建的文件名,以便我知道传递的内容是正确的。
任何人都可以指出为什么这不起作用以及我需要做些什么来使它工作。 更重要的是,既然我是一个骄傲的私生子,我不喜欢别人为我工作,请告诉我为什么它不起作用。
顺便说一句,我正在NetBeans中构建所有这些。
谢谢!
行file.mkdirs(); 将创建您尝试创建的文件夹。 然后在if(file.mkdir())语句中,它尝试再次创建该文件。 编写代码的方式,您将始终获得“未创建”但仍应显示该文件夹。
File#mkdirs
将自行返回false
。
更好的方法可能是使用更像......
if (!file.exists() && !file.mkdirs()) {
// Can not make the directory
} else {
// Directories exists or was created
}
在Windows 7,UAC和更新的安全模型下,您可能无法写入磁盘上的某些位置,包括Program Files
(我们在工作中遇到过这个问题:P)。
更糟糕的是,在Java 6下, File#canWrite
可以返回false
(即,当您无法写入指定位置时返回true
)。 我们发现的真正奇怪的事情是你甚至可以尝试写一个文件,它会引发异常......
我们过去所做的是使用File#canWrite
,如果返回true
,我们实际上将文件写入指定的位置,检查它是否存在并检查文件的内容。
如果这样可行,那么我们才会相信结果。
据我了解,这可能已在Java 7中得到修复...谢谢Windows:P
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.