IDE: IntelliJ
Framework: Spring Boot 2.4.11 Project
Gradle
oracle java 11
os: macOS X
압축 파일 푸는 것 구현 중에 압축 파일 내부에 파일목록을 리스트업 하는 부분이 있었다.
파일 명에 한글이 들어간 파일명 때문에! 에러가 난다!
자바에서 기본으로 제공하는 java.util.* 들은 한글이 깨진다고 한다.
압축 풀 때 한글 안깨진다는 apache.commons.compress에 가봤다.
라이브러리 추가 시 jar 파일을 프로젝트에 추가하면 되는데,
그동안 MVN central 검색 후, gradle dependencies 만 간단하게 추가해봐서 당황했다.
Download 탭에 들어가서 Binaries 로 되어있는 쪽을 다운로드 받자.
jar 파일이 있다!
jar는 실행가능한 바이너리코드
Source는 OS에 맞게 컴파일이 필요한 코드.
프로젝트 경로에 libs 디렉토리 만들기
디렉토리에 jar 복붙해서 넣기
build.gradle 열고 dependencies에 컴파일 할 jar 경로 적어주기
compile files('libs/commons-compress-1.21.jar')
참고) jar 개수가 많아서 libs 디렉토리 내 모든 jar 컴파일
compile fileTree(dir: 'libs', include: ['*.jar'])
압축 푸는 코드는 아래와 같다.
// 압축 풀기
public void saveUnzipFiles(String getStoreFileName, String itemName) throws IOException {
CompressionUtil cu = new CompressionUtil();
File sourceZipFile = new File(fileDir + getStoreFileName); // zip파일 경로
File targetDirPath = new File(fileDir + itemName); // 압축 풀 디렉토리 명
// 압축 풀기
cu.unzip(sourceZipFile, targetDirPath);
}
cu.unzip(sourceZipFile, targetDirPath, 인코딩);
마지막 인자에 인코딩을 추가해 줄 수 있다.
추가하지 않으면 아래와 같은 에러가 난다.
검색해보니 Mac OS X의 바이트 순서 때문이라고 한다.
"ISO-8859-1" 인코딩을 쓰면 런타임 에러는 안나지만, 압축 풀어보면 파일명이 깨진다.
cu.unzip(sourceZipFile, targetDirPath, "ISO-8859-1");
cu.unzip(sourceZipFile, targetDirPath, "EUC-KR");
URI가 URL에는 URI가 포함되어 있는데. 차이 ?
-> 식별자가 뭐든 간에 결국엔 HTTP 요청을 할 때 자원의 주소로 찾아가야 한다.
Identifier 식별자: 홍길동. (고유 이름)
Locator 주소: 서울시 양천구 목1동 @@아파트 홍길동.
라이브러리 다운 받을 때, Binaries 와 Source 차이 ?
-> jar는 컴파일 결과 실행가능한 파일이다. Source는 OS에 맞게 필요에 따라 컴파일 하라고 Source 로 릴리즈 한다.
한글 표현을 위해 UTF-8만 생각했었는데.. 인코딩 마다의 차이?