2014-04-23 53 views
3

我目前正在研究一種將創建文件和目錄的方法。波紋管是用例&解釋的問題。創建文件和目錄不能正常工作

1)當用戶指定路徑例如「/ parent/sub folder/file.txt」時,系統應該能夠創建目錄以及file.txt。 (這一項工作)

2)當用戶指定一個路徑,例如「/父/子文件夾/」或「/父/子文件夾」,系統應該能夠創建所有目錄。 (不起作用),而不是創建「/子文件夾/」或/子文件夾「作爲文件夾,它將創建一個名爲」子文件夾「的文件。

這是我的代碼

Path path = Paths.get(rootDir+"test/hello/"); 
    try { 
     Files.createDirectories(path.getParent()); 
     if (!Files.isDirectory(path)) { 
      Files.createFile(path); 
     } else { 
      Files.createDirectory(path); 
     } 
    } catch (IOException e) { 
     System.out.println(e.getMessage()); 
    } 
+1

爲什麼不使用.mkdr()作爲目錄和文件? –

+0

mkdir()做同樣的事情,它仍然會做什麼應該是一個文件目錄。 –

+0

如果你將path指定爲'/ parent/sub-folder' JVM如何識別你想創建一個目錄?我會創建並存檔,這就是它應該做的。 – maxx777

回答

2

您需要使用createDirectories(Path)代替createDirectory(path)正如tutorial解釋:

深創建目錄幾個層次,當一個或多個 父目錄可能還不存在,你可以使用便利 方法,createDirectories(Path,FileAttribute)。與 createDirectory(Path,FileAttribute)方法一樣,您可以指定 可選的一組初始文件屬性。以下代碼片段 使用默認屬性:

Files.createDirectories(Paths.get(「foo/bar/test」));

根據需要從上至下創建目錄 。例如,在foo/bar/test 示例中,如果foo目錄不存在,則會創建該目錄。接下來,如果需要,將創建 bar目錄,最後創建測試目錄 。

在創建一些父目錄的全部目錄後,此方法有可能失敗,但不是全部。

+0

是的,我以前使用它,但事情是,它會做我已經有的反對問題。例如,不是將「file.txt」創建爲文件,而是將其創建到一個目錄中 –

0

不確定您正在使用哪個File API。但是在下面找到最簡單的代碼來使用java.io包創建文件和文件夾。

import java.io.File; 
import java.io.IOException; 


public class FileTest { 

    public static void main(String[] args) { 
     FileTest fileTest = new FileTest(); 
     fileTest.createFile("C:"+File.separator+"folder"+File.separator+"file.txt"); 
    } 

    public void createFile(String rootDir) { 
     String filePath = rootDir; 
     try { 
      if(rootDir.contains(File.separator)){ 
       filePath = rootDir.substring(0, rootDir.lastIndexOf(File.separator)); 
      } 
      File file = new File(filePath); 
      if(!file.exists()) { 
       System.out.println(file.mkdirs()); 
       file = new File(rootDir); 
       System.out.println(file.createNewFile()); 
      } 
     } catch (IOException e) { 
      System.out.println(e.getMessage()); 
     } 
    } 

}