728x90
- 문제 코드
String originalFileName = Normalizer.normalize(i1.getOriginalFilename(), Normalizer.Form.NFC); // 유니코드 정규화
originalFileName = orgName.substring(originalFileName.indexOf("/") + 1); // 루트 폴더명 제거하여 폴더명1~파일명까지의 경로
originalFileName = Paths.get(originalFileName).toString();
String[] names = originalFileName.split(File.separator); // << 이 부분에서 오류남
- 에러 메시지
java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
- 문제 상황
- 파일의 full 경로를 받아서 File.separator로 분리하여 파일명, 폴더명을 받으려고 함
- 맥에서는 정상 작동하나 윈도우에서만!!!!! 안 됨 ㅡㅡ
- File 객체를 생성하라고 하였지만 그냥 string으로 해결하고 싶었음
- 문제 원인
- \ (back slash)가 정규 표현식에서 사용하는meta character 이다.
- \Q는 정규 표현식의 시작 표시, \E 는 정규 표현식의 끝을 표시하는 문자이다.
- Pattern.quote(”문자열”)은 문자열을 \Q와 \E로 묶어준다. 따라서, \Q\\E가 되어 메타 문자로 문자열을 split할 수 있게 된다.
- 해결 방법
String splitRegex = Pattern.quote(System.getProperty("file.separator"));
String[] names = originalFileName.split(splitRegex);
- 참고
https://stackoverflow.com/questions/10336293/splitting-filenames-using-system-file-separator-symbol
Splitting filenames using system file separator symbol
I have a complete file path and I want to get the file name. I am using the following instruction: String[] splittedFileName = fileName.split(System.getProperty("file.separator")); String
stackoverflow.com
+
- 파일 separator
- File.separator
import java.io.File; String separator = File.separator;
- System.getProperty("file.separator")
둘의 차이점은 라이브러리가 다르다는 것…?String separator = System.getProperty("file.separator");
- https://mkyong.com/java/how-to-get-file-path-separator-in-java/
728x90