在我的Java應用程序的當前工作目錄下創建一個名爲「Foo」的目錄(如果它尚不存在),最簡潔的方法是什麼?如何在當前工作目錄中創建一個目錄,使用Java
或者,稍有不同:在.NET中,什麼是Directory.CreateDirectory("Foo")
的Java等價物?
在我的Java應用程序的當前工作目錄下創建一個名爲「Foo」的目錄(如果它尚不存在),最簡潔的方法是什麼?如何在當前工作目錄中創建一個目錄,使用Java
或者,稍有不同:在.NET中,什麼是Directory.CreateDirectory("Foo")
的Java等價物?
java.io包不具有Directory
類,但你可以使用mkdir()
方法上File
類,而不是:
(new File("Foo")).mkdir()
注意mkdir()
有兩個獨立的失效模式:
checkWrite()
方法不允許創建指定的目錄」則將引發SecurityException
。mkdir()
將返回false。 (更具體地說,它將返回當且僅當創建的目錄真。)1點是好的 - 如果你沒有權限,扔掉。由於三個原因,點2有點次優:
旁白:對比點3的.NET
Directory.CreateDirectory()
這 什麼都不做,如果該目錄存在 行爲。 這種說法有道理 - 「創建一個 目錄」; 「好的,目錄是 創建」。如果是現在或更早創建的 ,這有什麼關係?通過這個 過程還是另一個?如果你真的 關心這一點,你不會問一個不同的 問題:「這個目錄是否存在?」
下一個警告是,mkdir()
不會一次創建多個目錄。對於我名爲「Foo」的目錄的簡單示例,這很好;然而,如果你想在目錄Foo中創建一個名爲Bar的目錄(即創建目錄「Foo/Bar」),你必須記住使用mkdirs()
方法。
因此,要解決所有這些需要注意的地方,你可以使用一個輔助方法,如下列:
public static File createDirectory(String directoryPath) throws IOException {
File dir = new File(directoryPath);
if (dir.exists()) {
return dir;
}
if (dir.mkdirs()) {
return dir;
}
throw new IOException("Failed to create directory '" + dir.getAbsolutePath() + "' for an unknown reason.");
}
你問了一個問題,並立即發佈自己的答案? – 2009-10-12 12:24:54
以前看過,這個想法是,發佈問題+答案組合的用戶想要對某個問題提出一個徹底的答案,這個問題在一個上下文中可能看起來很簡單,該上下文將指導那些還不知道如何去做他的人自己的答案。在我看來完全可以接受,儘管有點混亂。 – Esko 2009-10-12 12:28:15
啊,所以現在我知道Stackoverflow的願景(http://sstatic.net/so/Img/stackoverflow-venn-diagram.png)的「Blog」部分來自:) – sfussenegger 2009-10-12 12:37:19
我看過你的createDirectory
方法的稍微更簡潔的形式:
File f = new File(xyz);
if (!f.exists() && !f.mkdirs()) throw new IOException("Could not create directory " + f);
檢查f
是否存在但不是目錄也是值得的。
你問了一個問題,並立即發佈自己的答案? – KLE 2009-10-12 12:27:48
-1。看起來很奇怪發佈一個問題和答案。堆棧溢出不是您要講授的麥克風。 – 2009-10-12 12:37:40
+1。發佈自己的問題和答案並不錯。幫助社區併爲將來的參考提供幫助。如果人們不同意你的答案,那麼他們可以提供更好的答案。 Meta SO上的*快速*搜索似乎同意這很好。 – Iain 2009-10-12 12:42:34