파일을 저장할 때, 파일이 저장될 경로는 부분은 상당한 주의를 요한다. 경로에 따라서는 전혀 다른 위치가 저장될 수 있으니…
우리가 접하게 되는 운영체제에 따라서 다른 파일구분자(‘\’, ‘/‘, ‘:’)를 사용하고 있는데, 이를 문자열로 처리하기는 힘이 들다.
전에는 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();
}
}
위와 같은 형태로 차이가 생겨난다. 이 코드는 경로에 대한 변수가 증가할수록 더욱 확연한 차이를 보일 것이다. 오래전 코드를 사용하려고 하다가, 다르게 적용할 방법이 있을까하고 찾아보다가 걸린 이야기였다.