누락 된 상위 디렉토리와 함께 새 파일을 만드는 방법은 무엇입니까?


99

사용할 때

file.createNewFile();

다음 예외가 발생합니다.

java.io.IOException: Parent directory of file does not exist: /.../pkg/databases/mydb

누락 된 상위 디렉토리를 생성하는 createNewFile이 있는지 궁금합니다.

답변:


150

이거 해봤 어?

file.getParentFile().mkdirs();
file.createNewFile();

이 작업을 수행 할 단일 메서드 호출을 모르지만 두 개의 문으로 매우 쉽습니다.


이것은 단지 파일을 상위 디렉토리, 즉 포함하는 경로 문자열로 생성 된 경우 작동 new File("file.txt").getParentFile()수익을 null, new File("dir/file.txt").getParentFile()같은를 반환new File("dir")
졸탄

1
사실, mkdirs생성하려는 파일이 존재하지 않는 디렉토리에 있지 않으면 필요 하지 않지만 내 사용 사례는 여러 파일을 생성하는 입니다. 그 중 일부 는 상위 디렉토리가 있고 다른 파일은 그렇지 않습니다.
Zoltán 2014

14

Jon의 대답은 파일을 만드는 데 사용하는 경로 문자열에 상위 디렉토리가 포함되어 있다고 확신하는 경우, 즉 경로가 형식임을 확신하는 경우 작동합니다 <parent-dir>/<file-name>.

그렇지 않은 경우,이 형태의 상대 경로 즉 <file-name>, 다음 getParentFile()반환합니다 null.

File f = new File("dir/text.txt");
f.getParentFile().mkdirs();     // works fine because the path includes a parent directory.

File f = new File("text.txt");
f.getParentFile().mkdirs();     // throws NullPointerException because the parent file is unknown, i.e. `null`.

따라서 파일 경로에 상위 디렉토리가 포함되거나 포함되지 않을 수있는 경우 다음 코드를 사용하면 더 안전합니다.

File f = new File(filename);
if (f.getParentFile() != null) {
  f.getParentFile().mkdirs();
}
f.createNewFile();

많은 이유로 항상 경로를 포함해야합니다. 시스템은 그 파일을 어디에 저장할 것인지 어떻게 알 수 있습니까?
NikkyD 2015 년

@NikkyD 죄송합니다. 귀하의 의견을 잘 이해하지 못합니다. 내 대답에는 경로를 포함하지 않는다고 말하는 것이 아니라 전달 된 경로에 상위 디렉토리가 포함되지 않을 수 있습니다 . 대답에는 그러한 경로에 대한 예도 있습니다.
Zoltán 2015 년

9

java7부터 NIO2 API를 사용할 수도 있습니다.

void createFile() throws IOException {
    Path fp = Paths.get("dir1/dir2/newfile.txt");
    Files.createDirectories(fp.getParent());
    Files.createFile(fp);
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.