안녕하세요. 오늘은 Java를 이용하여, OS에 호환 되는 파일 경로 구성 방법과 웹 경로에 사용되는 / 문자열을 OS에 맞게, 파일 구분자로 변환하는 방법을 간단하게 포스팅 합니다.

OS마다 서로 다른 파일 구분자

파일 구분자는 OS마다 서로 다릅니다. 예를들어, 윈도우 운영체제는 파일 구분자로 \\ 역슬래쉬 두개를 사용합니다. 리눅스 운영체제는 웹 경로 문자열과 똑같이 파일 구분자로 /를 사용합니다.

Java는 이러한 서로 다른 파일 구분자를 처리하기 위해 JVM이 실행되는 OS 환경에 맞는 파일 구분자를 제공하는 API가 존재합니다.

String fileSeparator = File.separator;

따라서, 위의 API를 이용하면 OS에 호환되는 파일 경로를 구성할 수 있습니다.

String filePath = "Java" + File.separator + "Mommoo";

만약 Java7이상을 사용 하신다면, OS에 호환되는 파일 경로는 Path API를 사용하면 쉽게 구성할 수 있습니다.

String filePath = Paths.get("Java", "Mommoo");

OS 파일 구분자와 / 구분자 변환 처리하기

때때로, / 구분자를 파일 저장을 하기 위해 OS에 호환되는 파일 경로를 구성하고 싶을때가 있습니다. 단순히, / 구분자를 File.separator로 바꿔주면 됩니다만, Java API에 특정처리를 해줘야 합니다.

우리는 어떤 문자를 다른 문자로 바꾸고 싶을 때, Java String API의 replace API를 사용하곤 합니다. replace API는 바꿀 기준을 정할 때, 문자열이 아닌 정규식으로도 구성 할 수 있습니다. 문제는 여기서 생깁니다. 우리가 파라미터로 넣어준 것이 문자열 인지, 정규식 인지 구분이 안가는 상황이면, API는 정규식으로 처리합니다. 즉, 아래와 같이 구분자 처리를 한다면,

String testPath = "Java/Mommoo";
String filePath = testPath.replaceAll("/", File.separator);

윈도우 OS 에서는 오류가 발생합니다.

그 이유는, 윈도우 OS의 File.separator"\\"로 나오는데, 이 문자열을 정말 문자열로 해석하는 것이 아닌 정규식으로 해석합니다.

그러한 이유로 제대로 작동 되질 않습니다.

따라서, "\\"를 작동 가능한 문자로 바꿔주어야 합니다.

사실 아스키 코드 92번인'\\' char 문자로 넣어주면 됩니다만, replace API는 문자열을 파라미터로 받는 이유로 char 배열을 다시 String으로 변환 하는과정이 번거롭습니다.

따라서, Matcher API인 quoteReplacement를 사용합니다. 해당 API는 위에서 말한, char 문자 '\\'를 넣어준 문자열로 바꿔주는 역할을 합니다.

최종적으로 아래와 같이 API를 사용하면 정상적으로 작동 합니다.

String testPath = "Java/Mommoo";
String OsFilePath = testPath.replaceAll("/", Matcher.quoteReplacement(File.separator));
String reverseSlashPath = OsFilePath.replaceAll(Matcher.quoteReplacement(File.separator), "/");

오늘 준비한 포스팅은 여기까지 입니다.

읽어주셔서 감사합니다.

'Java' 카테고리의 다른 글

[Java] CheckedException vs UnCheckedException  (0) 2020.09.27
JAVA - JNI 사용하기  (2) 2017.09.02
JAVA - [SWING] LinearLayout 사용하기.  (0) 2017.08.25
JAVA - DownCasting(다운캐스팅)  (25) 2016.08.27
JAVA - HashMap key 구하기.  (1) 2016.08.25

포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.

Buy me a coffeeBuy me a coffee

+ Recent posts