자바

자바 NIO 파일과 디렉토리 - Path, 파일 시스템 정보, 파일의 속성 읽기, 파일과 디렉토리 생성과 삭제

알통몬_ 2017. 4. 16. 17:32
반응형


안녕하세요 알통몬입니다.

공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^

 


파일과 디렉토리 =>

IO는 파일의 속성 정보를 읽기 위해 File 클래스를 제공합니다.

NIO는 좀 더 다양한 파일의 속성 정보를 제공해주는 클래스, 인터페이스를

java.nio.File, java.nio.file.attribute 패키지에서 제공합니다.


경로정의 :

Path 는 IO 의 java.io.File클래스에 대응되는 NIO 인터페이스입니다.

NIO 의 API에서 파일의 경로를 지정하기 위해 Path를 사용하기 때문에 Path의 사용법을 알아야합니다.


Path 구현 객체는 java.nio.file.Paths 클래스의 get() 정적 메소드를 호출하여 얻습니다.

Path path = Paths.get(String first, String... more)

Path path = Paths.get(URI uri);

get() 의 매개값은 파일의 경로입니다. 문자열로 지정할 수도 있고, URI 객체로 지정할 수도 있습니다.

문자열의 경우면 전체 경로를 한꺼번에 지정하거나 상위 디렉토리와 하위 디렉토리로 나열해도 됩니다.


예)

 "C:\Temp\dir\file.txt"의 경로를 이용해 Path를 얻는 방법

Path path = Paths.get("C:\Temp\dir\file.txt");

Path path = Paths.get("C:\Temp\dir", "file.txt");

Path path = Paths.get("C:","Temp","dir", "file.txt"); 


파일의 경로는 절대 경로와 상대 경로를 사용할 수 있습니다.

Path 인터페이스에는 파일 경로를 얻을 수 있는 여러 정보를 제공해주는 메소드가 있습니다,


예제)

 import java.nio.file.Path;

import java.nio.file.Paths;

import java.util.Iterator;


public class Example {

 public static void main(String[] args) throws Exception {

  Path path = Paths.get("디렉토리 경로/PathExample.java");

  System.out.println("[[파일명]] " + path.getFileName());

  System.out.println("[[부모 디렉토리명]]: " + path.getParent().getFileName());

  System.out.println("중첩 경로 수: " + path.getNameCount());

  

  System.out.println();

  for(int i=0; i<path.getNameCount(); i++) {

   System.out.println(path.getName(i));

  }

  

  System.out.println();

  Iterator<Path> iterator = path.iterator();

  while(iterator.hasNext()) {

   Path temp = iterator.next();

   System.out.println(temp.getFileName());

  }

 }

}



파일 시스템 정보 :

FileSystem 인터페이스를 통해 운영체제의 파일 시스템에 접근할 수 있습니다.

FileSystem 구현 객체는 FileSystems 의 getDefault() 정적 메소드를 통해 얻을 수 있습니다.

FileSystem fileSystem = FileSystems.getDefault();

예제)

 import java.nio.file.FileStore;

import java.nio.file.FileSystem;

import java.nio.file.FileSystems;

import java.nio.file.Path;


public class Example {

 public static void main(String[] args) throws Exception {

  FileSystem fileSystem = FileSystems.getDefault();

  for(FileStore store : fileSystem.getFileStores()) {

   System.out.println("[[드라이버명]]: " + store.name());

   System.out.println("[[파일시스템]]: " + store.type());

   System.out.println("[[전체 공간]]: \t\t" + store.getTotalSpace() + " 바이트");

   System.out.println("[[사용 중인 공간]]: \t" + (store.getTotalSpace() - store.getUnallocatedSpace()) + " 바이트");

   System.out.println("[[사용 가능한 공간]]: \t" + store.getUsableSpace() + " 바이트");

   System.out.println();

  }

  

  System.out.println("[[파일 구분자]]: " + fileSystem.getSeparator());

  System.out.println();

  

  for(Path path : fileSystem.getRootDirectories()) {

   System.out.println(path.toString());

  }

 }

 

}



파일의 속성 읽기, 파일과 디렉토리 생성과 삭제

java.nio.file.Files 클래스에서는 파일과 디렉토리 생성과 삭제, 이 속성들을 읽는 메소드를 제공합니다.

속성이란 => 파일이나 디렉토리가 숨김인지, 디렉토리인지, 크기가 어떻게 되는지, 소유자가 누구인지에

대한 정보입니다.

java.nio.file.Files 클래스가 제공하는 정적메소드들입니다.

http://docs.oracle.com/javase/8/docs/api/

위 사이트에 들어가셔서 API 도큐먼트를 보시고 참고하시면 되겠습니다.


예제) 파일 속성 읽기

import java.nio.file.Files;

import java.nio.file.Path;

import java.nio.file.Paths;


public class Example {

 public static void main(String[] args) throws Exception {

  Path path = Paths.get("src/sec02/exam03_file_directory/FileExample.java");

  System.out.println("[[디렉토리 여부]]: " + Files.isDirectory(path));

  System.out.println("[[파일 여부]]: " + Files.isRegularFile(path));

  System.out.println("[[마지막 수정 시간]]: " + Files.getLastModifiedTime(path));

  System.out.println("[[파일 크기]]: " + Files.size(path));

  System.out.println("[[소유자]]: " + Files.getOwner(path).getName());

  System.out.println("[[숨김 파일 여부]]: " + Files.isHidden(path));

  System.out.println("[[읽기 가능 여부]]: " + Files.isReadable(path));

  System.out.println("[[쓰기 가능 여부]]: " + Files.isWritable(path));

 }

}


예제2) 디렉토리 및 파일 생성, 디렉토리 내용 출력

 import java.nio.file.DirectoryStream;

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class Example {
public static void main(String[] args) throws Exception {
Path path1 = Paths.get("C:/Temp/dir/subdir");
Path path2 = Paths.get("C:/Temp/file.txt");
if(Files.notExists(path1)) {
Files.createDirectories(path1);
}
if(Files.notExists(path2)) {
Files.createFile(path2);
}
Path path3 = Paths.get("C:/Temp"); // 디렉토리와 파일이 생성될 장소
DirectoryStream<Path> directoryStream = Files.newDirectoryStream(path3);
for(Path path : directoryStream) {
if(Files.isDirectory(path)) {
System.out.println("[[디렉토리]] " + path.getFileName());
} else {
System.out.println("[[파일]] " + path.getFileName() + " (크기:" + Files.size(path) + ")");
}
}
}
}


이상입니다.


반응형