Path 클래스 메서드
Path getRoot() : 루트 디렉토리 반환
Path getParent() : 부모 디렉토리 반환
Path getFileName() : 파일 이름 변환
boolean isAbsolute() : 절대경로면 true, 상대경로면 false 반환
Path toAbsolutePath() : 절대경로를 나타내는 Path 객체로 반환
Paths 클래스 메서드
static Path get(URL url) : 지정된 URL를 Path 개체로 변환. Path 객체 생성할 때 쓰임
예제1
import java.nio.file.Path;
import java.nio.file.Paths;
Class PathDemo{
public static void main(String[] args){
Path pt1 = Paths.get("C:\\JavaStudy\\PathDemo.java");
Path pt2 = pt1.getRoot();
Path pt3 = pt1.getParent();
Path pt4 = pt1.getFileName();
System.out.println(pt1); // C:\JavaStudy\PathDemo.java
System.out.println(pt2); // C:\
System.out.println(pt3); // C:\JavaStudy
System.out.println(pt4); // PathDemo.Java
}
}
예제2 ㅡ 현재 작업중인 파일의 상대 경로를 절대경로로 바꾸기
import java.nio.file.Path;
import java.nio.file.Paths;
public class Prac {
public static void main(String[] args) {
// 현재 디렉토리 정보를 '상대경로' 형태로 담긴 인스턴스 생성
Path cur = Paths.get("");
String cdir;
if(cur.isAbsolute()) cdir = cur.toString();
else cdir = cur.toAbsolutePath().toString();
System.out.println(cdir);
}
}
Files 클래스 메서드
static Path createFile(Path path, FileAttribute<?>... attrs) throws IOException
: 지정한 경로에 빈 파일 생성, 경로가 유효하지 않거나 파일이 존재하면 예외 발생
static Path createDirectory(Path path, FileAttribute... attrs) throws IOException
: 지정한 경로에 디렉토리 생성, 경로가 유효하지 않으면 예외 발생
static Path createDirectories(Path path, FileAttribute... attrs) throws IOException
: 지정한 경로의 모든 디렉토리 생성
파일을 대상으로 하는 간단한 입출력 (Files 클래스 메서드)
- open, close 과정이 없음
- 단순하고 코드 간결 (I/O스트림에 비해 성능이 뛰어난건 아님)
- 데이터양이 적고 성능 문제가 없을 경우 사용할 것
static Path write(Path path, byte[] bytes, OpenOption... options) throws IOExceptions
: 파일에 바이트를 씀
가변인자에 들어갈 옵션 인자들:
- StandardOpenOption.READ : 읽기 전용 파일 열기
- StandardOpenOption.WRITE : 쓰기 전용 파일 열기
- StandardOpenOption.APPEND : 파일의 끝에 데이터 추가 (WRITE, CREATE와 함께 사용 가능)
- StandardOpenOption.CREATE : 파일이 존재하지 않으면 생성
- StandardOpenOption.CREATE_NEW : 새 파일 생성. 이미 존재하는 파일이면 예외 발생
- StandardOpenOption.TRUNCATE_EXISTING : 쓰기 위해 파일을 여는데 파일이 존재하면 파일의 내용을 덮음(WRITE와 함께 사용 가능)
- StandardOpenOption.DELETE_ON_CLOSE : 스트림을 닫을 때 파일 삭제 (임시파일 삭제할 때 이용)
static Path write(Path path, Iterable<? extends CharSequnece> lines, OpenOption... options)
: 파일에 바이트를 씀
- Iterable<E> 인터페이스를 Collection<E> 인터페이스가 상속 받음
- Collection 요소의 문자열들만 저장이 됨
- CharSequnece 인터페이스를 String 클래스가 구현
static btye[] readAllBytes(Path path) throws IOException
: 파일의 모든 바이트를 읽음.
static List<String> readAllLines(Path path) throws IOException
: 줄 단위로 읽음
static Path copy(Path source, Path target, CopyOption... options) throws IOException
: 매개변수 source 파일을 target 파일로 복사
가변인자에 들어갈 옵션 인자들:
- StandardCopyOption.REPLACE_EXISTING : 이미 파일이 존재한다면 해당 파일을 대체
- StandardCopyOption.COPY_ATTRIBUTES : 파일의 속성까지 복사
static Path move(Path source, CopyOption... options) throws IOException
: 매개변수 sourve 파일을 target 파일로 이동
가변인자에 들어갈 옵션 인자들:
- StandardCopyOption.REPLACE_EXISTING : 이미 파일이 존재한다면 해당 파일을 대체
예제1
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class Prac {
public static void main(String[] args) throws IOException{
Path fp = Paths.get("C:\\JavaStudy");
fp = Files.createFile(fp); // 파일 생성
Path dp1 = Paths.get("C:\\JavaStudy\\Empty");
dp1 = Files.createDirectory(dp1); // 디렉토리 생성
Path dp2 = Paths.get("C:\\JavaStudy\\Java");
dp2 = Files.createDirectories(dp2); // 경로의 모든 디렉토리 생성
}
}
예제2 ㅡ 파일을 대상으로 하는 간단한 입출력
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
public class Prac {
public static void main(String[] args) throws IOException{
Path fp = Paths.get("C\\JavaStudy\\simple.bin");
// 파일 생성. 파일이 존재하면 예외 발생
fp = Files.createFile(fp);
byte[] buf1 = {0x13, 0x14, 0x15}; // 파일에 쓸 데이터
// 파일 데이터 쓰기
Files.write(fp, buf1, StandardOpenOption.APPEND);
// 파일로부터 데이터 읽기
byte[] buf2 = Files.readAllBytes(fp);
// 읽어 들인 데이터의 출력을 위한 반복문
for(byte b: buf2)
System.out.print(b + " ");
System.out.println();
}
}
I/O스트림을 기반으로 하는 방법에 비해 매우 단순하고 간단한 방법. 따라서 입력할 데이터의 양이 적고 성능이 문제되지 않는 경우에 한해 이 방법을 사용할 것.
예제3
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.List;
public class Prac {
public static void main(String[] args) throws IOException{
Path fp = Paths.get("C:\\JavaStudy\\simple.txt");
String str1 = "One Simple String";
String str2 = "Two Simeple String";
List<String> lst1 = Arrays.asList(str1, str2);
// 파일에 문자열 저장
Files.write(fp, lst1);
// 파일로부터 문자열 읽기
List<String> lst2 = Files.readAllLines(fp);
System.out.println(lst2); // [One Simple String, Two Simple String]
}
}
예제4 ㅡ 파일 및 디렉토리의 복사
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
public class Prac {
public static void main(String[] args) throws IOException{
Path src = Paths.get("C:\\JavaStudy\\CopyFileFromFiles.java");
Path dst = Paths.get("C:\\JavaStudy\\CopyFileFromFiles2.java");
// src가 지시하는 파일을 dst가 지시하는 위치와 이름으로 복사
Files.copy(src, dst, StandardCopyOption.REPLACE_EXISTING);
}
}
예제5 ㅡ 파일 및 디렉토리 이동
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
public class Prac {
public static void main(String[] args) throws IOException{
Path src = Paths.get("C:\\JavaStudy\\Dir1");
Path dst = Paths.get("C:\\JavaStudy\\Dir2");
// src가 지시하는 디렉토리를 dst가 지시하는 디렉토리로 이동
Files.move(src, dst, StandardCopyOption.REPLACE_EXISTING);
}
}
'[자바] > 자바 문법' 카테고리의 다른 글
[Java] 빌드, 실행 그리고 빌드툴 (ant, maven, gradle) (0) | 2022.02.01 |
---|---|
[JAVA] Predicate 함수형 인터페이스(Functional Interface) (0) | 2021.11.27 |
[JAVA] Operator 함수형 인터페이스(Fucntional Interface) (0) | 2021.11.27 |
[JAVA] Function 함수형 인터페이스(Funtional Interface) (0) | 2021.11.27 |
[JAVA] Consumer 함수형 인터페이스(Functional Interface) (0) | 2021.11.27 |