mwultong Blog ... 프로그래밍 / 계산기

컴퓨터 엑셀 워드 포토샵 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
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() 이든, 파일의 실제 존재 여부는 확인하지 않습니다. 주어진 파일명의 앞에 현재 디렉토리명을 붙이는 것이 하는 일의 전부입니다.


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);
    }

  }
}



컴파일 및 실행 결과:
D:\Z>javac Foo.java && java Foo
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 프로그래밍

0 Comments:

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Previous Posts
Monthly Archives
Top