2014-02-22 152 views
14

我正在創建一個簡單的程序,它會嘗試從磁盤讀入「conf/conf.xml」,但是如果這個文件或dir不存在,它們將會創建它們。使用Java nio創建一個子目錄和文件

我可以做到這一點使用下面的代碼:

// create subdirectory path 
    Path confDir = Paths.get("./conf"); 

    // create file-in-subdirectory path 
    Path confFile = Paths.get("./conf/conf.xml"); 

    // if the sub-directory doesn't exist then create it 
    if (Files.notExists(confDir)) { 
     try { Files.createDirectory(confDir); } 
     catch (Exception e) { e.printStackTrace(); } 
    } 

    // if the file doesn't exist then create it 
    if (Files.notExists(confFile)) { 
     try { Files.createFile(confFile); } 
     catch (Exception e) { e.printStackTrace(); } 
    } 

我的問題是,如果這樣做這真的是最優雅的方式?看起來很費神,需要創建兩個路徑才能在新的子目錄中創建一個新文件。

+2

'Path'有'.resolve()'和'.getParent( )',所以你可以從那裏開始 – fge

+0

我沒有得到你的異常邏輯:爲什麼你嘗試創建文件,如果該目錄不存在並且不能創建? – steffen

回答

15

您可以聲明您的confFileFile而不是Path。然後你可以使用confFile.getParentFile().mkdirs();,見下面的例子:

// ... 

File confFile = new File("./conf/conf.xml"); 
confFile.getParentFile().mkdirs(); 

// ... 

或者,使用你的代碼是,你可以使用:

Files.createDirectories(confFile.getParent()); 
+0

如果.conf /已經存在,不會使用mkdirs()或者createDirectories(..)來檢測異常嗎?我可以看到如何使用File來完成,但是想知道爲什麼nio下的Paths/Files沒有同樣的簡單的方法來做到這一點。 – user3341332

+0

@ user3341332不,它根本不會拋出異常。看到Javadoc。 – EJP

+3

但請注意,如果路徑的「字符串」中沒有更多部分,則'Path.getParent()'返回'null'。例如,帶'dir/b.txt'的'Path'將返回路徑'dir',但'dir.getParent()'將返回'null'。因此'Files.createDirectories(dir.getParent());'拋出'NullPointerException',儘管'dir'在其他目錄中。 – PhoneixS

相關問題