Java/Language

파일구분자(File.separator)를 대체하는 Path, Paths 사용하기

허니몬 2014. 12. 9. 10:25

파일을 저장할 때, 파일이 저장될 경로는 부분은 상당한 주의를 요한다. 경로에 따라서는 전혀 다른 위치가 저장될 수 있으니…
우리가 접하게 되는 운영체제에 따라서 다른 파일구분자(‘\’, ‘/‘, ‘:’)를 사용하고 있는데, 이를 문자열로 처리하기는 힘이 들다.

전에는 File.separtor’를 문자열 중간중간에 넣으면서 필요한 경로를 만들었다면,
이제는 java.nio.file 패키지에 있는 ‘Path’, ‘Paths’를 이용하여 간결하게 코드를 작성해보자.

import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;

import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;

import org.junit.Test;

public class PathTest {

    @Test
    public void testAddFileSeperator() {
        String path = "honeymon" + File.separator + "test";
        assertThat(path.toString(), is("honeymon/test"));

        path = "honeymon" + File.separator + "test" + File.separator + "file-separator";
        assertThat(path.toString(), is("honeymon/test/file-separator"));
    }

    @Test
    public void testPathsGet() {
        Path path = Paths.get("honeymon", "test");
        assertThat(path.toString(), is("honeymon/test"));

        path = Paths.get("honeymon", "test", "path");
        assertThat(path.toString(), is("honeymon/test/path"));
    }
}

파일 경로를 저렇게 만드는 이유 중 하는, 특정 위치에 파일을 생성하거나 조작하기 위해서인데 기존의 방식과 비교하면 다음처럼 파일을 다룰 수 있게 된다.

@Test
public void testMakeDir() {
    File file = new File("honeymon" + File.separator + "test" + File.separator + "file-separator");
    if(!file.exists()) {
        file.mkdir();
    }
}

@Test
public void testMakeDirByPath() {
    File file = Paths.get("honeymon", "test", "path").toFile();
    if(!file.exists()) {
        file.mkdir();
    }
}

위와 같은 형태로 차이가 생겨난다. 이 코드는 경로에 대한 변수가 증가할수록 더욱 확연한 차이를 보일 것이다. 오래전 코드를 사용하려고 하다가, 다르게 적용할 방법이 있을까하고 찾아보다가 걸린 이야기였다.

Sent from My Haroopad
The Next Document processor based on Markdown - Download