[오류일지]PatternSyntaxException 오류 해결

문제상황

파일 다운로드 클릭시 아래와 같은 콘솔에러가 발생했다.

1
2
java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
\




해결순서

파일을 업로드한 위치에 파일이 있는지 확인하기

나는 아래의 파일에 다운로드 할 파일 원본이 있는지 확인해본다.

1
D:\\workspace\\프로젝트명\\webapp\\upload




FileController.java로 가서 해당 Mapping부분을 확인하기

아래처럼 Mapping 부분을 체크해본다

1
2
3
4
5
6
7
8
9
10
11
12
13
@RequestMapping(value = "/downloadn", method = RequestMethod.GET)
@AuthMapping
public void downloadDo(){
if(savename != null && !"".equals(savename)) {
savename = savename.replaceAll("/", "");
savename = savename.replaceAll("\\", "");
}
if(realname != null && !"".equals(realname)) {
realname = realname.replaceAll("/", "");
realname = realname.replaceAll("\\", "");
}
//코드 생략
}




이스케이프 문자 사용하기

문자열을 다루는 메서드를 사용할 때는 \를 주의해야한다.
split이나 replace메서드의 인자로 들어가는 String 토큰이 regex 정규식이기 때문에 이스케이프 문자를 사용해야한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//수정전
if(savename != null && !"".equals(savename)) {
savename = savename.replaceAll("/", "");
savename = savename.replaceAll("\\", "");
}
if(realname != null && !"".equals(realname)) {
realname = realname.replaceAll("/", "");
realname = realname.replaceAll("\\", "");
}

//수정후
if(savename != null && !"".equals(savename)) {
savename = savename.replaceAll("/", "");
savename = savename.replaceAll("\\\\", "\\");
}
if(realname != null && !"".equals(realname)) {
realname = realname.replaceAll("/", "");
realname = realname.replaceAll("\\\\", "\\");
}




파일 경로 자체의 문제

위 방법으로 해결안된다면 파일 경로 자체의 문제일 수 있다.
local.properties에서 file.base.path를 확인해본다.
파일이 저장된 곳이랑 일치하는 지 확인한다.
나의 경우 달랐기때문에 1번의 경로와 일치시켜주었다.

1
file.base.path=D:\\workspace\\프로젝트명\\webapp\\upload

오류 해결!!
문자열을 다루는 메서드를 사용할 때는 \를 꼭 주의하자!