Java - NonWritableChannelException

Doveloper·2024년 1월 16일
0

Back-end

목록 보기
6/6

SAS Application 배포 중
Java NonWritableChannelException 발생원인 - RefCntManager getFileChannel 로직이
File 존재 시 StandardOpenOption.READ 로 open,
File 존재하지 않을 시 StandardOpenOption WRITE 로 open 하기 때문.

FileChannel.open 시 StandardOpenOption 의 option 여러개를 줄 수 있음

  • READ - 읽기 전용
  • WRITE - 쓰기 전용, 이미 존재 시 내용을 지우고 처음부터 씀
  • APPEND - 쓰기 전용, 이미 존재 시 새로운 데이터는 파일의 끝에 추가 (WRITE option 필요)
  • TRUNCATE_EXISTING - 파일을 열 때 파일 내용 삭제 (WRITE option과 함께 사용)
  • CREATE - 파일이 존재하지 않으면 새로운 파일 생성
  • CREATE_NEW - 파일이 이미 존재하면 실패 (파일이 존재하지 않을 때만 생성)
  • DELETE_ON_CLOSE - 파일이 닫힐 때 자동으로 삭제
  • SPARSE - 희소 파일을 생성. 희소 파일은 물리적 저장 공간을 최소화하기 위해 사용되는 데이터 저장 기법
  • SYNC - 파일 콘텐츠와 메타데이터의 업데이트를 매번 동기화
  • DSYNC - 파일 콘텐츠의 업데이트만 동기화

옵션을 여러 개 지정했을 때의 우선순위는 옵션들이 서로 어떻게 조합되는지에 따라 다름

일반적으로, FileChannel에서는 제공된 모든 옵션을 고려하여 파일을 여는데, 일부 옵션 조합은 서로 충돌할 수 있으며 이러한 경우 IllegalArgumentException이 발생 가능

예를 들어

  • READWRITE는 함께 사용할 수 있으며, 이 경우 파일은 읽기 및 쓰기 모두 가능
  • APPENDTRUNCATE_EXISTING은 서로 충돌. 둘 다 WRITE와 함께 사용될 수 있지만, 동시에 사용 불가
  • CREATE_NEW & CREATE
  • SYNC & DSYNC

파일을 안전하게 쓰고 싶다면 WRITE, SYNC 를 같이 사용

파일의 기존 내용을 유지하면서 새 데이터를 추가하고 싶다면 WRITE, APPEND 를 함께 사용

profile
Hungry Developer

0개의 댓글