Post

Files, Path

Files, Path

NIO (NonBloking Input-Output)

입출력 모듈 중에 프로그램 입출력(In/Out)부터 제어권을 CPU 가 가져와서 작업을 진행하는 것으로 CPU 는 명령어의 수행을 완료할 때까지 기다린다. 따라서 이 기능은 처리 시간이 많이 소모한다.
그래서인지 IO 는 이런 문제점 때문에 파일 입출력이 느리다는 한계점에 부딫히고, 이런 문제점을 극복한Non-blocking IO(nio, New IO) API를 제공해서 개선하였다.

결론은 Non-Blocking API 는 하나의 Thread 가 IO작업에 의존적이지 않기 때문에 하나의 쓰레드로 다수의 IO를 처리할 수도 있다.

그래서 이러한 NIO, IO패키지에 속한 Path, File에 대해서 알아볼려고 한다.


Path

Path 클래스는 IO 의 java.io.File클래스에 대응되는 자바 7에서 추가된 java.nio.file 패키지에 속한 인터페이스이며, 디렉토리의 경로를 표현하고 다룰 수 있는 방법을 제공한다.
Path를 통해, 파일, 디렉토리 옮기기, 복사, 삭제, 읽기, 쓰기 등의 작업을 수행할 수 있는데, 자주 쓰는 코드는 Path 구현 객체는 java.nio.file.Paths 클래스의 get() 정적 메소드를 호출하여 얻는다.

1
2
Path path = Paths.get(String first, String... more)
Path path = Paths.get(URI uri);

Paths 클래스는 Path를 다룰 수 있는 여러 메서드를 제공하며, Paths 또한 java.nio.file 패키지에 속해있다.
중요한 점은, Path는 단순히 경로정보를 캡슐화한 것이다. 파일의 존재 여부는 상관 없다.

  • 예제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import java.nio.file.Path;
import java.nio.file.Paths;

        Path path = Paths.get("c:\\ex\\Test.txt"); // 절대경로

        path.getFileName(); // getFileName:파일네임 반환

        path.getParent(); // getParent: 부모 주소 반환

        path.getRoot(); // getRoot: 디렉토리 최상위 루트 반환 c:\

        path.isAbsolute(); // isAbsolute: 절대경로인지를 판단

        URI uri = path.toUri(); // toUri:  전체 경로 URI를 반환 
        


        Path path2 = path.toAbsolutePath(); // toAbsolutePath : 졀대경로를 반환
        

        Path pathEx = Paths.get("c:\\ex\\abc\\dfg\\test.txt"); 

        Path path3 = pathEx.subpath(0, 3); 

        // subpath: 몇번째 디렉토리부터 몇번째 디렉토리 값을 읽어올지 지정 가능
    

        Path p1 = Paths.get("c:\\ex\\ex1");

        Path p2 = Paths.get("test.txt");

        Path p3 = p1.resolve(p2); // resolve: 경로 합치기


  • 요약: Path는 디렉토리의 경로에 대한 유틸



File

Filejava.io에, Filesjava.nio에 속한 클래스이다.
Files은 파일 시스템을 통해, 파일을 다루는 여러 유틸리티 메서드를 제공하며, FilesFile과 달리, 주로 Path객체를 사용해 메서드를 사용한다.
즉 파일과 디렉토리 생성과 삭제, 이 속성들을 읽는 메소드를 제공한다.

  • Files 예제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
       
       // 파일 또는 디렉토리 존재 유무 확인
       Path path = Paths.get("c:\\ex\\test");
          
       Files.exists(path);

       Files.isReadable(path); // 읽기 가능 여부 체크

       Files.isWritable(path); // 쓰기 가능 여부 체크

       Files.isExecutable(path); // 실행 가능 여부 체크

       Path testPath = Paths.get("c:\\test\\ex");

        try {

            Path dir = Files.createDirectories(testPath); // 디렉토리 생성. 예외처리 필요

        } catch (IOException e) {

            e.printStackTrace();

        }
        

        Path pathFile = Paths.get("c:\\ex\\test.txt");

        Path file = null;

        try {

            file = Files.createFile(pathFile); // 파일 생성.

        } catch (IOException e) {e.printStackTrace();}

        
        try {

            Files.delete(pathFile); // 파일 삭제

        } catch (IOException e) {e.printStackTrace();}

    

        try {

            Files.delete(pathFile); // 디렉토리 삭제

        } catch (IOException e) {e.printStackTrace();}


  • 요약: Files은 파일의 속성에 대한 유틸을 제공



This post is licensed under CC BY 4.0 by the author.