事实证明:应用程序不必独立于平台。
我坐在这里已经有一段时间了,我不知道为什么这会给我造成很大的麻烦。我想做的是这样的:
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中构建所有这些。
谢谢!
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
当您无法写入指定位置时返回)。我们发现的真正奇怪的事情是,您甚至可以尝试写入一个引发异常的文件...
过去我们所做的是use File#canWrite
,如果return true
,则实际上将文件写入指定的位置,检查文件是否存在并检查文件的内容。
如果这行得通,那么只有我们相信结果。
据我了解,这可能已经在Java 7中修复了...谢谢Windows:P
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句