쿠릉쿠릉 쾅쾅
쿠릉쿠릉 쾅쾅
쿠릉쿠릉 쾅쾅
250x250
전체 방문자
오늘
어제
  • 분류 전체보기
    • HTML CSS
    • 잡담
    • 프로그래밍 꿀팁 사이트
    • 코딩 도서
    • [자바]
      • 디자인 패턴
      • 자바의 정석 - 3판
      • 자바
      • 자바 문법
    • git
    • [TDD]
    • 개발 서적 독후감
      • 클린 코더
      • 토비 스프링3
      • 객체지향의 사실과 오해
      • 모던 자바 인 액션
      • 엘레강트 오브젝트
    • CS
      • 운영체제
      • HTTP
    • [SQL]
      • SQL 기초
      • 혼자공부하는SQL
    • [ Spring ]
      • REST API
      • Spring Toy
      • Spring 에러
      • Spring
      • Spring 입문
      • Spring 핵심 원리
      • SpringMVC 1편
      • SpringMVC 2편
      • Spring Boot를 이용한 RESTful We..
      • Batch
    • [JPA]
      • JPA
      • JPA 에러
      • JPA 프로그래밍 - 기본편
      • 스프링 부트와 JPA 활용 1 - 웹 애플리케이..
      • 실전! 스프링 부트와 JPA 활용2 - API 개..
      • 실전! 스프링 데이터 JPA
      • 실전! Querydsl
    • 인텔리제이
    • [DB]
      • DB
      • H2
    • Gradle
    • 면접
    • [알고리즘]
      • 알고리즘
      • 자료구조
      • 자바 알고리즘 공부
    • [프로젝트]
    • 쿠릉식 객체지향 사고
    • 리눅스

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • springboot
  • 자료구조
  • Spring
  • querydsl
  • 스프링부트
  • GitHub
  • JPA
  • 재귀
  • SQL
  • 함수형인터페이스
  • 백준
  • 깃허브
  • 스프링
  • MVC
  • http
  • 알고리즘
  • 자바
  • Git
  • java
  • REST API

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
쿠릉쿠릉 쾅쾅

쿠릉쿠릉 쾅쾅

[자바]/자바 문법

[JAVA] 파일 시스템, NIO

2021. 12. 2. 10:12
728x90

 

 

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);
	}

}

 

728x90

'[자바] > 자바 문법' 카테고리의 다른 글

[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
    '[자바]/자바 문법' 카테고리의 다른 글
    • [Java] 빌드, 실행 그리고 빌드툴 (ant, maven, gradle)
    • [JAVA] Predicate 함수형 인터페이스(Functional Interface)
    • [JAVA] Operator 함수형 인터페이스(Fucntional Interface)
    • [JAVA] Function 함수형 인터페이스(Funtional Interface)
    쿠릉쿠릉 쾅쾅
    쿠릉쿠릉 쾅쾅
    깃허브 주소 : https://github.com/kureung

    티스토리툴바