728x90
반응형
SPEC
Spring boot version 2.6.2
Java 1.8 -> RestTemplate을 이용한 API 통신을 위한 프로젝트
예시 코드
ZIP 파일 내부 개별의 파일들을 확인하며 해당 파일들의 이름 / 파일 크기를 출력하는 예시 코드는 다음과 같습니다.
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-compress -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>1.27.1</version>
</dependency>
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipFile;
import java.io.File;
import java.io.IOException;
import java.util.Enumeration;
public class ApacheCommonsCompressExample {
public static void main(String[] args) {
// ZIP 파일 경로
File zipFile = new File("example.zip");
try (ZipFile zip = new ZipFile(zipFile)) {
Enumeration<ZipArchiveEntry> entries = zip.getEntries();
// 엔트리를 순회하며 정보 출력
while (entries.hasMoreElements()) {
ZipArchiveEntry entry = entries.nextElement();
System.out.println("File: " + entry.getName());
System.out.println("Size: " + entry.getSize()); // 압축 해제된 크기
System.out.println("Compressed Size: " + entry.getCompressedSize()); // 압축된 크기
System.out.println("Is Directory: " + entry.isDirectory());
System.out.println("-----");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
문제
위의 코드와 유사한 프로젝트 개발 방향에 맞게 코드를 수정해서 사용중이었습니다.
그런데 파일 크기중 return 값에 -1이 나오는것을 발견했습니다.
원인
zip 파일 내부의 파일명에 공백(" ")이 존재.
자세히 확인 해 보면 00-46 다음 공백 이후 다음 이름이 있습니다.

해결
해당 파일의 이름을 수정해 공백을 없앤 뒤 출력 해 보니 정상적으로 파일 크기가 잡히는것을 확인 할 수 있었습니다.
zipEntry의 경우 불가항력적으로 원인미상의 -1을 return 할 때도 있다고는 합니다.
제가 확인한 바로는 각 개별 파일에 공백이 존재하는 경우에도 getSize()를 했을 때 -1을 return 했으니 이부분을 확인 해 보시면 좋겠네요.

반응형
'JAVA - SPRING' 카테고리의 다른 글
[Spring Boot] 스프링 인터셉터 | Spring Interceptor란? (0) | 2022.12.27 |
---|---|
[Java] 세션과 쿠키 | 클라이언트와 서버 | WAS Servlet이란? (0) | 2022.12.25 |
[Java] File Upload 파일명 현재시간으로 업로드 시키기 (0) | 2022.12.08 |
[MyBatis / Spring] TooManyResultsException 오류 해결방법 (0) | 2022.11.21 |
[Spring Boot] 윈도우 h2 console , bat 실행 안됨 해결법 (0) | 2022.11.16 |