새 파일에 쓸 때 자동으로 전체 경로 만들기


246

로 새 파일을 작성하고 싶습니다 FileWriter. 나는 이것을 다음과 같이 사용한다 :

FileWriter newJsp = new FileWriter("C:\\user\Desktop\dir1\dir2\filename.txt");

지금 dir1dir2현재 존재하지 않는다. Java가 없으면 자동으로 작성하고 싶습니다. 실제로 Java는 아직 존재하지 않는 경우 전체 파일 경로를 설정해야합니다.

어떻게하면 되나요?

답변:


431

다음과 같은 것 :

File file = new File("C:\\user\\Desktop\\dir1\\dir2\\filename.txt");
file.getParentFile().mkdirs();
FileWriter writer = new FileWriter(file);

11
왜 mkdirs뿐만 아니라 getParentFile입니까?
sauperl

다른 형제 파일로 동일한 코드를 다시 발행하면 이전 폴더보다 우선합니까?
surajs1n

1
@ surajs1n : 디렉토리가 이미 존재 mkdirs하면 아무것도하지 않습니다.
Jon Skeet

3
@sauperl : 파일이 아직 존재하지 않으면 mkdirs () 는 지정된 모든 것이 디렉토리라고 가정하고 그대로 테스트합니다. getParentFile () 을 사용 하여 파일 자체 작성을 FileWriter에 남겨 둡니다 .
h4nek

149

Java 1.7부터는 Files.createFile을 사용할 수 있습니다.

Path pathToFile = Paths.get("/home/joe/foo/bar/myFile.txt");
Files.createDirectories(pathToFile.getParent());
Files.createFile(pathToFile);

4
상대 경로로 인해 널 포인터 예외가 발생할 수 있음을 명심하십시오. Path pathToFile = Paths.get("myFile.txt"); Files.createDirectories(pathToFile.getParent());
Mag

if (! Files.exists (pathToFile.getParent ())) Files.createDirectory (pathToFile.getParent ()); // 오류를 피하기 위해 디렉토리가 이미 존재하는지 테스트
Andre Nel

29

사용 File.mkdirs():

File dir = new File("C:\\user\\Desktop\\dir1\\dir2");
dir.mkdirs();
File file = new File(dir, "filename.txt");
FileWriter newJsp = new FileWriter(file);


4

FileUtils 를 사용 하여 이러한 모든 두통을 처리 하십시오 .

편집 : 예를 들어, 아래 코드를 사용하여 파일에 쓰면이 방법은 '부모 디렉토리가 존재하지 않으면 확인하고 작성합니다'.

openOutputStream(File file [, boolean append]) 

1
좀 더 구체적으로 말씀해 주시겠습니까?
Jean

안녕 진, 편집. FileUtils에는 다른 유용한 방법이 많이 있습니다. OIUtils 및 FileUtils와 같은 Apache Commons IO 클래스는 Java 개발자의 삶을 더 쉽게 만듭니다.
kakacii

1
FileUtils가 좋은 방법이지만 동의하는 더 쉬운 방법은 openOutputStream이 아니라 writeStringToFile을 사용하는 것입니다. 예 : 파일 파일 = 새 파일 ( "C : /user/Desktop/dir1/dir2/filename.txt"); FileUtils.writeStringToFile (파일, "foo bar baz", true);
paul

감사합니다. 내 코드를 훨씬 깨끗하게 만들었습니다. 최근 javadoc에 연결 : commons.apache.org/proper/commons-io/javadocs/api-2.5/org/…
Nikhil Sahu
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.