scala를 통해 이미지의 저장경로가 담긴 배열의 값을 읽어,
바이트스트림에 저장할때, 나타난 에러입니다.
배경은 파일이 저장된 경로들을 담은 배열을 반복하여
파일을 가져와 zip파일에 하나씩 추가하고 압축하는 일이었습니다.
반복문 내 소스를 추가하여 해결하였습니다.
예제소스:
// zip파일에 담길 데이터 스트림 선언
val outputStream = new ByteArrayOutputStream()
val zipOutputStream = new ZipArchiveOutputStream(outputStream)
// ftp서버의 파일을 읽어 outputStream에 저장
file_list.foreach { row =>
val file_full_path = row(0).toString
// 각 경로의 끝은 파일의 이름이었습니다.
val file_name = file_full_path.split('/').last
// 압축 파일 내 각 파일들의 이름입니다.
val entry = new ZipArchiveEntry(file_name)
zipOutputStream.putArchiveEntry(entry)
val fileStream = ftpClient.retrieveFileStream(file_full_path)
val buffer = new Array[Byte](1024)
var bytesRead = fileStream.read(buffer)
// 파일의 모든 내용을 읽을 때 까지 반복
while (bytesRead != -1) {
zipOutputStream.write(buffer, 0, bytesRead)
bytesRead = fileStream.read(buffer)
}
// 이 구문 넣어줘야 연속해서 파일들 읽을 때 널포인터 에러가 나지 않았습니다.
if (fileStream!=null) {
fileStream.close()
}
ftpClient.completePendingCommand()
zipOutputStream.closeArchiveEntry()
}
zipOutputStream.finish()
zipOutputStream.close()
ftpClient.logout()
ftpClient.disconnect()
반응형
'Language > Scala' 카테고리의 다른 글
scala) json 파싱 시 {"sizeMapDefined":false,"traversableAgain":true,"empty":false} (0) | 2023.12.19 |
---|