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()
반응형

+ Recent posts