chapter 2. 메타데이터 파일 속성
메타 데이타 란 ? 파일이나 디렉토리에 대한 속성 정보를 의미 합니다. 데이터에 관한 데이터
- 숨김 여부
- 디렉토리 여부
- 크기
- 소유자 등
2.1 NIO.2에서 지원하는 뷰 (6가지)
- BasiceFileAttributeView : 모든 파일시스템 구현물에서 지원해야 하는 기본 속성에 대한 뷰를 제공한다. 속성 뷰의 이름은 basic
- DosFileAttributeView : 도스(DOS)속성을 지원하는 파일시스템에서 지원하는 네 가지 표준 속성에 대한 뷰를 제공한다.이 속성 뷰의 이름은 dos다.
- PosixFileAttributeView : basic 속성 뷰를 확장한 뷰로 유닉스 같은 POSIX 표준을 지원하는 파일시스템의 속성을 보여준다. 이 속성 뷰의 이름은 posix다.
- FileOwnerAttributeView : 파일 소유자 개념을 지원하는 파일시스템 구현물에서 지원하는 뷰다. 속성 뷰의 이름은 owner다.
- AclFileAttributeView : 파일은 ACL 읽기나 업데이트를 지원하는 뷰다. NFSv4 ACL 모델을 지원한다. 이 속성 뷰의 이름은 acl이다.
- UserDefinedFileAttributeView : 사용자가 정의한 메타데이터를 지원하는 뷰다.
뷰 문자열 (view-name) - 좀더 조사 필요함. (win7 기준)
- basic
- dos
- owner
- acl
- user
2.2 특정 파일 시스템에서 지원하는 뷰 결정
- FileSystem.supportedFileAttributeViews(): 파일 시스템에서 지원하는 뷰 목록
- 원도7 경우 뷰 목록 : acl , basic, owner,user,dos
- 모든 시스템에서는 반드시 basic 뷰를 지원한다.
- FileStore.supportsFileAttributeView() : 파일 저장소가 특정 뷰를 지원하는 여부 (특정 패스도 가능하다)
2.3 basic 뷰
- Files.readAttributes() : 전체 속성을 가지고 오기
- BasicFileAttributes.size() : 파일 크기 (bytes)
- BasicFileAttributes.creationTime() : 생성날짜
- BasicFileAttributes.lastAccessTime() : 마지막 접근 날짜
- BasicFileAttributes.lastModifiedTime() : 마지막 변경 날짜
- BasicFileAttributes.isDirectory() : 디렉토리 여부
- BasicFileAttributes.isRegularFile() : 정규 파일 여부(일반파일)
- BasicFileAttributes.isSymbolicLink() : 심볼릭링크 여부
- BasicFileAttributes.isOther() : 디렉토리 , 일반 파일 , 심볼릭링크 이외
- Files.getAttribute() : 단일 속성 가지고 오기 , 여기서 두번째 인자 attribute 문자열 와 같은 형식 따른 다.
- attribute 문자열 형식 : [view-name:]attribute-name
- basic 뷰에서의 속성 이름(attribute-name)
- lastModifiedTime
- lastAccessTime
- lastAccessTime
- size
- isRegularFile
- isDirectory
- isSymbolicLink
- isOther
- fileKey
- FileTime.setTimes() : 3가지 속성 변경 (lastModifiedTime,lastAccessTime,lastAccessTime) 하나라도 null 이면 변경 되지 않음.
- Files.setLastModifiedTime() : 파일 수정일 변경
- Files.setAttribute() : 파일 속성 변경
2.4 DOS 뷰
DOS 파일시스템(삼바)에 특화된 뷰, basic뷰를 확장함. 츄가로 아래 네가지 속성이 추가됨.
추가된 속성
- isReadOnly() : readonly 속성 값을 반환 (true 이면 삭제/변경이 불가능)
- isHidden() : hidden 속성 값을 반환 (true 이면 해당 파일을 사용자가 볼수 없음)
- isArchive() : archive 속성 값을 반환 (백업 프로그램 전용)
- isSystem() : system 속성 값을 반환 (true 이면 OS 파일임.)
2.5 File Owner 뷰
파일 소유자(file owner)의 개념을 UserPrincipal 인터페이스로 매핑함.(NIO에서)
FileOwnerAttributeView 인터페이스를 통해서 소유자를 알아내거나 설정할 수 있음.
파일 소유자 속성 이름은 : owner
만약 파일 소유자를 가져 올 수 없으면 java.nio.file.attribute.UserPrincipalNotFoundException 예외 발생함.
- Principal 관련 메소드
- FileSystem.getUserPrincipalLookupService() : 기본 파일시스템에 대한 사용자 principal 가져올 수 있음.
- 파일 소유자 설정 메소드들
- Files.setOwner() : 파일 소유자 설정하기
- FlieOwnerAttributeView.setOwner() : 파일 소유자 설정
- Files.setAttribute() : 파일 소유자 설정 (owner:owner)
- 파일 소유자 가져오는 메소드
- FileOwnerAttributeView.getOwner() : 파일 소유자 가져오기
- Files.getAttribute() : 파일 소유자 가져오기
2.6 POSIX 뷰
PosixFileAttributes : 유닉스 계열에서 지원하는 속성을 basic 뷰에 추가함. 추가된 속성은 파일 소유자,그룹소유자,아홉가지 접근 권한등
관련 속성 이름들은
- group : 관련 메소드는 PosixFileAttributes.group()
- permissions : 관련 메소드는 PosixFileAttributes.permissions()
2.6.1 POSIX 권한
- PosixFileAttributes.permissions() : 권한 헬퍼 객인 PosixFilePermissions 객체의 컬레션을 반환
- PosixFilePermissions.asFileAttribute() : 파일 권한 Set를 받아서 FileAttribute를 생성한다. 그리고 Path.createFile()이나 Path.createDirectory()에 속성을 전달한다.
- PosixFilePermissions.fromString() : 코드에 직접 쓴 문자열(“rw-r--r--”)로 파일의 권한을 설정할 수 있다.
2.6.2 POSIX 그룹 소유자
- PosixFileAttributeView.setGroup() : 주어진 그룹으로 변경함.
2.7 ACL 뷰
접근제어 목록은 파일시스템의 객체 권한에 엄격한 규칙을 적용하는데 쓰이는 권한의 컬렉션이다.
ACL에서는 각 객체의 소유자,권한을 비롯해 다양한 플래그를 제어한다. AclFileAttributeView 인터페이스로 표현됨.
ACL에서는 각 객체의 소유자,권한을 비롯해 다양한 플래그를 제어한다. AclFileAttributeView 인터페이스로 표현됨.
acl 속성 이름 목록
- acl
- owner
ACL 읽는 방법
- Files.getFileAttributeView() : ACL 읽기 List<AclEntry> 형태로 추출함.
- Files.getAttribute() : ACL 읽기 List<AclEntry> 형태로 추출함. 속성 이름 문자열은 acl:acl 임.
AclEntry 클래스의 하위 네가지 컴포넌트 (acl 항목이 매핑되어 있음)
- 타입 : 항목이 권한을 획득했는지, 거부됐는지를 결정한다. 타입은 ALARM,ALLOW,AUDIT,DENY
- principal : 어떤 항목이 권한을 획득했는지, 거부 됐는지에 대한 아이덴티티, 아이덴티디는 UserPrincipal로 매핑됨.
- 권한 : 권한으로 된 세트 Set<AclEntryPermission>로 매핑
- 플래그 : 항목이 어떻게 상속되고 전파되는지를 가리키는 플래그로 된 세트, Set<AclEntryFlag>로 매핑
ACL에 새 권한 부여하기
- ACL항목 생성 : AclEntry.Builder의 build() 메소드를 통해서
- principal에 새 권한 부여하는 절차
- FileSystem.getUserPrincipalLookupService()를 이용해서 principal을 찾는다.
- acl 뷰를 얻는다.
- AclEntry.Builder 객체를 사용하여 ACL 항목을 생성한다.
- ACL을 읽는다.
- 새항목을 삽입한다.
- setAcl()이나 setAttribute()를 사용해서 ACL을 재작성한다.
2.8 파일 저장소 속성
NIO.2에서 FileStore 추상 클래스를 파일 저장소로 표현한다. 그리고 각종 정보를 가져올 수 있다.
각종 정보들
- 저장소 이름 : name() 이용
- 저장소 타입 : type() 이용
- 전체 용량 : getTotalSpace() 이용, 단위 바이트
- 사용한 공간 : (getTotalSpace() - getUnallocatedSpace()) 이용, 단위 바이트
- 여유 공간 : getUsableSpace() 이용, 단위 바이트
- 읽기 전용 여부 : isReadOnly()
주요 관련 메소드
- Files.getFileStore() : 특정 파일이 있는 파일 저장소의 속성 가져오기
- FileStore.getFileStoreAttributeView() : FileStoreAttributeView 가져오고 가져오는 속성을 사용하여 정보를 읽거나 변경할수 있다.
2.9 사용자 정의 파일 속성 뷰 (UserDefinedFileAttributeView 인터페이스)
자신만의 속성을 뷰를 만들 때 사용한다. 예) 분산 파일 시스템 개발 시 분산되었는지 복사 되었는지 관련 속성을 추가 할 수 있다.
- 사용자 정의 속성 지원 여부 검사 : FileStore.supportsFileAttributeView(UserDefinedFileAttributeView.class)
사용자 정의 속성 관련 기능
- 사용자 정의 속성 정의 : UserDefinedFileAttributeView.write() 사용.
- 사용자 정의 속성 이름과 값 크기 나열하기
- UserDefinedFileAttributeView.list() : 속성 이름 목록 가져오기
- UserDefinedFileAttributeView.size(name) : 속성 값의 크기
- 사용자 정의 속성 값 가져오기 : UserDefinedFileAttributeView.read() 사용
- 파일의 사용자 정의 속성 삭제하기 : UserDefinedFileAttributeView.delete() 사용
- 참고 문헌 : 한빛미디어 , 자바7 NIO.2 파일&네트워크 프로그램밍
댓글 없음:
댓글 쓰기