2014-02-22 1 views
14

"conf/conf.xml"을 디스크에서 읽으려고하는 간단한 프로그램을 만들고 있지만이 파일이나 디렉토리가 존재하지 않는 경우 대신 만듭니다.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을 (가'과 :

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

또는 그대로 코드를 사용하여, 당신은 사용할 수 있습니다 : 그럼 당신은 아래의 예를 참조 confFile.getParentFile().mkdirs();을 사용할 수 있습니다)', 그래서 거기에서 시작할 수 있습니다. – fge

+0

예외 논리를 얻지 못했습니다 : 디렉토리가 존재하지 않고 생성 될 수없는 경우 왜 파일을 만들려고합니까? – steffen

답변

15

Path 대신 confFileFile으로 지정할 수 있습니다. `.getParent()를

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

.conf가 이미 존재한다면 mkdirs() 또는 createDirectories (..)를 사용하지 않을 것인가? 파일로 어떻게 할 수 있었는지 알 수는 있지만 nio의 Paths/Files가 똑같이 가지지 않는지 궁금하다. 이것을하는 간단한 방법. – user3341332

+0

@ user3341332 아니요. 예외를 발생시키지 않습니다. Javadoc을 보라. – EJP

+3

그러나 경로의 "문자열"에 더 이상 부분이 없으면'Path.getParent()'는'null'을 리턴합니다. 예를 들어'dir/b.txt'를 가진'Path'는'dir' 경로를 리턴 할 것이지만'dir.getParent()'는'null'을 리턴 할 것입니다. 따라서'dir'이 다른 디렉토리 안에 있지만'Files.createDirectories (dir.getParent());'는'NullPointerException'을 던집니다. – PhoneixS

관련 문제