파일을 외부공간에 올려두고 그것을 다시 URL Stream 으로 읽어어 오려고 한다.
하지만 이파일이 어느 확장자명을 가진것인지 모를때는 META 데이터를 읽어와 확장자 명을 정의해야한다.
URL.openStream() 과 Files.write({file_name}, {input_stream}) 으로 저장하려할때 어째든 파일 이름과 확장자 명이 필요하다. 그럼 해당 파일에 대한 확장자명은 파일을 임의의 파일로 저장한뒤에 메타데이터를 읽어와 다시한번 저장 하도록 한다.
순서
1. URL 스트림으로 파일 읽기
2. Temp directory 에 파일 저장 하기
3. 템프파일을 읽어들여 메타데이터확인하기
4. 템프디렉토리 파일을 지정된 파일 경로로 메타데이터를 입혀 저장하기
public static void urlOpenStream_nio() throws IOException {
// 경로지정
String FILE_NAME = "fileName";
Path path = Paths.get("C:\\Users\\Mezzomedia\\Downloads\\test");
// 파일 스트림, 저장
InputStream io = new URL(FILE_URL).openStream();
Files.copy( io, Paths.get("C:\\Users\\Mezzomedia\\Downloads\\test"));
// 파일 읽기 메타데이터 읽기
BasicFileAttributes basicFileAttributes = Files.readAttributes(path,BasicFileAttributes.class);
System.out.println(basicFileAttributes);
//PosixFileAttributes attrs = Files.readAttributes(path, PosixFileAttributes.class);
//System.out.println(attrs);
UserDefinedFileAttributeView userDefinedFileAttributeView = Files.getFileAttributeView(path, UserDefinedFileAttributeView.class);
System.out.println(userDefinedFileAttributeView);
}
BasicFileAttributeView: 모든 파일시스템 구현물에서 지원해야 하는 기본 속성에 대한 뷰를 제공합니다. 속성 뷰의 이름은 basic입니다.
DosFileAttributeView: 도스(DOS) 속성을 지원하는 파일시스템에서 지원하는 네 가지 표준 속성에 대한 뷰를 제송합니다. 이 속성 뷰의 이름은 dos입니다.
PosixFileAttibuteView: basic 속성 뷰를 확장한 뷰로 유닉스같은 POSIX 표준을 지원하는 파일시스템의 속성을 보여줍니다. 이 속성 뷰의 이름은 posix입니다.
FileOwnerAttributeView: 파일 소유자 개념을 지원하는 파일 시스템 구현물에서 지원하는 뷰입니다. 속성 뷰의 이름은 owner입니다.
AclFileAttributeView: 파일의 ACL 읽기나 업데이트를 지원하는 뷰입니다. NFSv4 ACL 모델을 지원합니다. 이 속성 뷰의 이름은 acl입니다.
UserDefinedFileAttributeView: 사용자가 정의한 메타데이터를 지원한는 뷰입니다.
허나, 이렇게 사용한다고 해서 내가 원하는 META 데이터를 추출하진 못했다.
그래서 좀더 찾아 보니 오픈소중에 META 데이터를 추출하는 라이브러리가 있어 소개한다.
- metadata-extractor
[https://github.com/drewnoakes/metadata-extractor](https://github.com/drewnoakes/metadata-extractor)
- Apache Tika
[http://tika.apache.org/](http://tika.apache.org/)
'JAVA' 카테고리의 다른 글
java final 의 의미, 언제 사용할까? (0) | 2021.06.09 |
---|---|
java Class initializationblock(instance initialization) , 초기화 생성 블럭 (0) | 2021.06.09 |
java generic 사용법 (0) | 2021.06.01 |
java Byte[] 문자열 변환 및 복원 (0) | 2021.06.01 |
remote debuging intelliJ (0) | 2021.04.29 |