成立事实:应用程序不需要独立于平台。
我一直坐在这里一段时间,我不知道为什么这会给我带来如此多的问题。我想做的是:
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(对话框),其中包含它正在尝试创建的文件名,以便我知道正在传递的是正确的。
任何人都可以指出为什么这不起作用以及我需要做些什么来使其发挥作用。更重要的是,由于我是一个骄傲的混蛋,我不喜欢别人为我工作,请告诉我为什么它不起作用。
顺便说一句,我正在NetBeans中构建所有这些。
谢谢!
答案 0 :(得分:2)
行file.mkdirs();将创建您尝试创建的文件夹。然后在if(file.mkdir())语句中,它尝试再次创建该文件。编写代码的方式,你将始终得到"没有创建"但文件夹仍然应该出现。
答案 1 :(得分:0)
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