Java

SCJP 30번 문제 File객체의 파일 및 디렉토리 생성 / 디렉토리 변경

bang2001 2013. 7. 25. 15:43

QUESTION 30

Given that the current directory is empty, and that the user has read and write permissions, and the following:
11. import java.io.*;
12. public class DOS {
13. public static void main(String[] args) {
14. File dir = new File("dir");
15. dir.mkdir();
16. File f1 = new File(dir, "f1.txt");
17. try {
18. f1.createNewFile();
19. } catch (IOException e) { ; }
20. File newDir = new File("newDir");
21. dir.renameTo(newDir);
22. }
23. }


Which statement is true?


A. Compilation fails.
B. The file system has a new empty directory named dir.
C. The file system has a new empty directory named newDir.
D. The file system has a directory named dir, containing a file f1.txt.
E. The file system has a directory named newDir, containing a file f1.txt.
Answer: E

 

-------------------------------------------------------------------------------------------

 

먼저 이 문제를 해석해 보겠습니다.

 

-> 현재 디렉토리(경로)는 비어있습니다. 그리고 사용자는 이 경로에 대해서 읽고 쓰기가 가능한 권한을 가지고 있습니다.

   코드는 다음과 같을때, 다음 보기에서 이 코드에 대한 상태를 나타낸 것에서 옳바른 것을 고르시오.. 라는 문제입니다.

 

먼저 보면 14번째 줄에서 문자열 "dir"이라는 문자열을 매개변수로 받아서 인자생성자가 실행되었습니다.
즉 "dir" 이라는 문자열을 가진 파일객체를 생성하였고,

15번째 줄에서 이 "dir" 이라는 문자열을 가진 객체를 통해서 디렉토리를 생성하였습니다.
여기서 현재 주어진 문자열의 형태가 절대경로의 형태를 띄지 않기 때문에 현재 클래스가 위치한 경로에
해당 dir이라는 이름의 디렉토리를 생성하게 됩니다. 즉 상대경로로써 인식하고 그 상대경로에 해당 디렉토리를 생성하게 되는것입니다.
그리고 16번째 줄에서 이렇게 생성한 디렉토리 안에 f1.txt파일을 생성하도록 합니다.

 

그런데 이때! 15번째 줄에 있는 createNewFile() 메소드는 IOException을 발생하게 됩니다. System.in.read() 처럼 
메소드 자체에서 예외를 발생하게 됩니다.

 

- API참고한 자료입니다. -
public boolean createNewFile() throws IOException  <- 이 메소드의 헤더는 이처럼 구성되어있습니다.

 

따라서 try catch문으로 잡거나 throws로 던져야 합니다. 여기서는 try catch로 잡아서 처리한 것을 볼 수 있습니다..
20번째 줄은 "newDir"이라는 문자열을 가진 파일 객체를 생성하도록 하였고,
21번째 줄은 이 "newDir"이라는 문자열을 가진 객체를 통해서 위에서 생성한 dir이라는 문자열을 가진
File객체를 .. 즉 dir이라는 이름을 가진 디렉토리를 newDir이라는 이름으로 변경하도록 하였습니다.
(만약 dir이 디렉토리가 아닌 파일일 경우에는 해당 파일의 이름을 변경하게 됩니다. renameTo() 메소드를 호출한 파일객체에 따라서 정해집니다.)

따라서 최종 결과물은 newDir이라는 디렉토리가 존재하게 되고, 그 디렉토리 안에는 f1.txt 파일이 들어있게 됩니다.

 

따라서 답은 E가 됩니다.