2013년 9월 9일 월요일

자바7 NIO.2 - 내용정리 2장

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 속성 이름 목록
  • 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에 새 권한 부여하는 절차
  1. FileSystem.getUserPrincipalLookupService()를 이용해서 principal을 찾는다.
  2. acl 뷰를 얻는다.
  3. AclEntry.Builder 객체를 사용하여 ACL 항목을 생성한다.
  4. ACL을 읽는다.
  5. 새항목을 삽입한다.
  6. 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 파일&네트워크 프로그램밍


댓글 없음: