【问题标题】:Trouble with creating a new folder in Windows using Java使用 Java 在 Windows 中创建新文件夹时遇到问题
【发布时间】:2013-10-04 07:41:59
【问题描述】:

既定事实:应用程序不需要独立于平台。

我已经在这里坐了一段时间了,我不知道为什么这会给我带来这么大的问题。我想做的是这样的:

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 中构建所有这些。

谢谢!

【问题讨论】:

  • 请分享您的代码...
  • 废话!对不起。不过,为此+1。 :)
  • 这段代码在我的机器上运行良好。但是rootPane 是什么?您确定您有权在C 驱动器上写入文件吗?
  • File#mkdirs 将返回 true/false 本身。如果您随后尝试调用 File#mkdir,它可能会返回 false,因为该目录可能已经存在。另外,请注意,在 Windows 7 下,UAC/安全模型可能会限制您在受保护的文件夹中创建目录,例如 Program Files...
  • 您可以使用File#canWrite()轻松查看可以写入指定文件夹的天气

标签: java directory subdirectory


【解决方案1】:

行 file.mkdirs();将创建您尝试创建的文件夹。然后在您的 if(file.mkdir()) 语句中,它试图再次创建文件。代码的编写方式,您总是会得到“未创建”,但该文件夹仍应出现。

【讨论】:

  • 我不同意。如果file.exists() 返回的不是true,它将运行else 代码。如果file.exists() 返回true 并且如果创建了文件夹,它将通过JOptionPane (Dialog) 通知。嵌入的if 语句是让我知道何时满足该条件,是否创建文件夹。
  • @Rincewind:我不知道你为什么不同意,但 jhnewkirk 说的是真的。如果您查看 File (docs.oracle.com/javase/7/docs/api/java/io/File.html#mkdir%28%29) 的 Javadoc,mkdir() 仅在创建目录时才返回 true,但不会因为您已经使用 mkdirs()。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-07
    • 1970-01-01
    • 2014-02-19
    • 2020-10-08
    • 2012-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多