Saturday, November 18, 2006
Java/자바] 파일 전체 경로, 절대 패스 구하기, 풀패스; Get File Full Path Name
파일이나 디렉토리에 대한 상대적인 패스 (Relative Pathname; 상대 경로) 를, 절대적인 패스(Absolute Pathname; 절대 경로)로 변경하는 방법입니다.
예를 들어,
0.txt
Z/0.txt
/Z/0.txt (유닉스에서는 /Z/0.txt 이것이 절대 경로임)
위와 같은 것이 상대 경로이고,
D:/Z/0.txt
이런 것이 절대 경로 즉 풀 패스 입니다. 물론 리눅스와 유닉스의 절대 결로는 "/" 이런 슬래시 문자로 시작되고, 드라이브 문자는 없습니다.
0.txt 이런 파일명을 주었을 때, 그 파일명의 전체적인 정확한 주소를 얻는 방법입니다. (디렉토리명의 경우에도 똑같습니다.)
File 클래스에 getAbsolutePath() 와 getCanonicalPath() 라는 메소드(함수)가 있는데, 둘다 비슷하지만 후자가 더 무난합니다.
getAbsolutePath() 이것은, 특수한 디렉토리명을 입력했을 때 좀 의외의 방식으로 작동합니다.
가령 현재 디렉토리를 의미하는 "." 나, 상위 디렉토리를 의미하는 ".." 의 절대 경로를 구하면,
getCanonicalPath() 는 자연스럽게 현재와 상위 디렉토리명을 보여주는데
getAbsolutePath() 는 "\." 그리고 "\.." 이런 식으로 나와 버립니다. 이것도 틀린 것은 아니지만 특수한 경우가 아니면 쓰기가 좀 곤란합니다.
따라서 파일의 절대 경로를 구할 때에는 getCanonicalPath() 메소드를 사용하는 것이 좋습니다.
그런데 주의해야 할 점이 있습니다. getAbsolutePath() 이든 getCanonicalPath() 이든, 파일의 실제 존재 여부는 확인하지 않습니다. 주어진 파일명의 앞에 현재 디렉토리명을 붙이는 것이 하는 일의 전부입니다.
소스 파일명: Foo.java
컴파일 및 실행 결과:
"0.txt" 라는 파일에 대한 풀패스를 출력했습니다.
D:\Z\0.txt
이런 경로를 자바 소스에 직접 입력하면, illegal escape character (잘못된 이스케이프 문자) 라는 에러가 나기에
D:\\Z\\0.txt
이렇게 백슬래쉬 문자를 2번 중복해 주든지
D:/Z/0.txt
그냥 이렇게 합니다. 윈도우에서도 백슬래쉬(\)가 아닌 그냥 슬래쉬(/)를 패스 구분자로 쓸 수 있습니다.
예를 들어,
0.txt
Z/0.txt
/Z/0.txt (유닉스에서는 /Z/0.txt 이것이 절대 경로임)
위와 같은 것이 상대 경로이고,
D:/Z/0.txt
이런 것이 절대 경로 즉 풀 패스 입니다. 물론 리눅스와 유닉스의 절대 결로는 "/" 이런 슬래시 문자로 시작되고, 드라이브 문자는 없습니다.
0.txt 이런 파일명을 주었을 때, 그 파일명의 전체적인 정확한 주소를 얻는 방법입니다. (디렉토리명의 경우에도 똑같습니다.)
File 클래스에 getAbsolutePath() 와 getCanonicalPath() 라는 메소드(함수)가 있는데, 둘다 비슷하지만 후자가 더 무난합니다.
getAbsolutePath() 이것은, 특수한 디렉토리명을 입력했을 때 좀 의외의 방식으로 작동합니다.
가령 현재 디렉토리를 의미하는 "." 나, 상위 디렉토리를 의미하는 ".." 의 절대 경로를 구하면,
getCanonicalPath() 는 자연스럽게 현재와 상위 디렉토리명을 보여주는데
getAbsolutePath() 는 "\." 그리고 "\.." 이런 식으로 나와 버립니다. 이것도 틀린 것은 아니지만 특수한 경우가 아니면 쓰기가 좀 곤란합니다.
따라서 파일의 절대 경로를 구할 때에는 getCanonicalPath() 메소드를 사용하는 것이 좋습니다.
그런데 주의해야 할 점이 있습니다. getAbsolutePath() 이든 getCanonicalPath() 이든, 파일의 실제 존재 여부는 확인하지 않습니다. 주어진 파일명의 앞에 현재 디렉토리명을 붙이는 것이 하는 일의 전부입니다.
getCanonicalPath(): 자바에서 파일 풀 패스 알아내기 예제
소스 파일명: Foo.java
import java.io.*;
public class Foo {
public static void main (String[] args) {
File f = new File("0.txt");
// 간단하지만 문제가 있음
System.out.println(f.getAbsolutePath());
// 더 좋은 방법
try {
System.out.println(f.getCanonicalPath());
} catch (IOException e) {
System.err.println(e);
System.exit(1);
}
}
}
public class Foo {
public static void main (String[] args) {
File f = new File("0.txt");
// 간단하지만 문제가 있음
System.out.println(f.getAbsolutePath());
// 더 좋은 방법
try {
System.out.println(f.getCanonicalPath());
} catch (IOException e) {
System.err.println(e);
System.exit(1);
}
}
}
컴파일 및 실행 결과:
D:\Z>javac Foo.java && java Foo
D:\Z\0.txt
D:\Z\0.txt
D:\Z\0.txt
D:\Z\0.txt
"0.txt" 라는 파일에 대한 풀패스를 출력했습니다.
D:\Z\0.txt
이런 경로를 자바 소스에 직접 입력하면, illegal escape character (잘못된 이스케이프 문자) 라는 에러가 나기에
D:\\Z\\0.txt
이렇게 백슬래쉬 문자를 2번 중복해 주든지
D:/Z/0.txt
그냥 이렇게 합니다. 윈도우에서도 백슬래쉬(\)가 아닌 그냥 슬래쉬(/)를 패스 구분자로 쓸 수 있습니다.
tag: java
자바 | Java 프로그래밍
<< Home