[JAVA] 자바 폴더 생성 및 파일 생성시 java.util.regex.PatternSyntaxException: Unexpected internal error near index 1 오류 해결방법
파일쓰기를 할때 디렉토리 경로가 없다면 자동으로 생성해주고 파일쓰기를 하면 되는데 개발환경은 윈도우이고 테스트서버는 리눅스 환경이라면?
파일 구분자는 OS마다 서로 다르다.
윈도우 운영체제는 파일 구분자로 \ 역슬래쉬 두 개를 사용한다.
리눅스 운영체제는 웹 경로 문자 열과 똑같이 파일 구분자로 / 를 사용한다.
Java는 이러한 서로 다른 파일 구분자를 처리하기 위해 JVM 이 실행되는 OS 환경에 맞는 파일 구 분자를 제공하는 API가 존재한다.
String fileSeparator = File.separator; 따라서, 위의 API를 이용하면 OS에 호환되는 파일 경로를 구성할 수 있다.
String filePath = “workplace” + File.separator + “test”;
위 filePath를 받아서 처리하는 함수가 아래와 같은 경우 윈도우OS에서는 오류가 발생할 수 있다. 참고로 리눅스 서버환경에서는 정상적으로 동작하는 코드이다.
File file = new File(filePath);
if(!file.exists()) {
String[] temp = filePath.split(“/”);
List<string> list = Arrays.asList(temp);
list.remove(list.size()-1);
String path = String.join(“/”);
File directory = new File(path);
if(!directory exists()) {
directory.mkdirs();
}
file.createNewFile();
}
위 코드에서
java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
\ 오류가 발생된다.
아래 코드와 같이 처리해주어야 오류가 발생하지않고 폴더 생성 후 파일이 생성된다.
…이상 생략
String fileSeparator = Matcher.quoteReplacement(File.separator);
String[] temp = filePath.split(fileSeparator);
….생략
String path = String.join(“/”);
…생략