java.nio.file.Files 소개
java.nio.file.Files 클래스는 파일 시스템과 관련된 다양한 작업을 수행하는 데 사용되는 유틸리티 클래스입니다.
이 클래스는 파일의 존재 여부를 확인하고, 파일을 생성하거나 삭제하고, 파일의 내용을 읽거나 쓰고, 파일의 권한을 설정하는 등의 작업을 수행할 수 있습니다.
Files 클래스의 주요 메서드는 다음과 같습니다.
- exists(Path path): 지정된 경로의 파일이 존재하는지 여부를 확인합니다.
- createFile(Path path): 지정된 경로에 새 파일을 생성합니다.
- delete(Path path): 지정된 경로의 파일을 삭제합니다.
- readAllBytes(Path path): 지정된 경로의 파일의 내용을 바이트 배열로 읽습니다.
- write(Path path, byte[] bytes): 지정된 경로의 파일에 바이트 배열의 내용을 씁니다.
- setPosixFilePermissions(Path path, Set<PosixFilePermission> perms): 지정된 경로의 파일의 권한을 설정합니다.
java.io.File과 java.nio.file.Files의 차이점
java.io.File은 자바에서 파일 또는 디렉토리의 경로를 추상화한 클래스입니다.
기본적인 파일 생성, 삭제, 이름 변경 등의 기능을 제공하지만, 파일 내용을 읽고 쓰는 기능은 제공하지 않습니다.
또한, 파일 메타데이터(파일 크기, 수정 시간 등)를 가져오는 기능은 제한적입니다.
반면에 java.nio.file.Files는 자바 7에서 도입된 NIO(New Input/Output) 패키지의 일부로, 파일의 내용을 읽고 쓰는 기능뿐만 아니라, 파일의 메타데이터 접근, 심볼릭 링크 처리, 파일 트리 순회 등 더 다양한 기능을 제공합니다.
또한, java.nio.file.Files는 java.nio.file.Path 인스턴스를 이용하여 파일이나 디렉토리를 처리하는데,
이는 java.io.File보다 더 유연하고 강력한 기능을 제공합니다.
따라서, 간단한 파일 또는 디렉토리 경로를 다루는 경우에는 java.io.File을, 파일의 내용을 처리하거나
복잡한 파일 시스템 작업을 수행하는 경우에는 java.nio.file.Files를 사용하는 것이 적절할 것입니다.
Files 클래스를 사용하여 파일 내용 읽는 방법
Files.readAllLines(Path path, Charset cs)
지정된 파일의 모든 행을 읽어 문자열 리스트로 반환합니다.
package test;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
public class ReadFileLinesExample {
public static void main(String[] args) {
Path filepath = Paths.get("D:\\test\\b의개발공부기록\\b의개발공부기록.txt");
try {
List<String> lines = Files.readAllLines(filepath, StandardCharsets.UTF_8);
// 읽어온 라인들을 처리
for (String line : lines) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Files.readAllBytes(Path path)
지정된 파일의 모든 바이트를 읽어 바이트 배열로 반환합니다.
package test;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class ReadFileBytesExample {
public static void main(String[] args) {
Path filePath = Paths.get("D:\\test\\b의개발공부기록\\b의개발공부기록.txt");
String ByteToString = null;
try {
byte[] encoded = Files.readAllBytes(filePath);
// 바이트를 문자로 변환하여 출력
ByteToString = new String(encoded);
System.out.println(ByteToString);
} catch (IOException e) {
e.printStackTrace();
}
}
}
newBufferedReader(Path path, Charset cs)
지정된 파일에 대한 BufferedReader를 생성하여 사용할 수 있습니다.
package test;
import java.io.BufferedReader;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class example {
public static void main(String[] args) {
Path filePath = Paths.get("D:\\test\\b의개발공부기록\\b의개발공부기록.txt");
try {
BufferedReader reader = Files.newBufferedReader(filePath, StandardCharsets.UTF_8);
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Stream<String> lines(Path path, Charset cs)
파일의 각 행에 대한 스트림을 반환합니다.
package test;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class example {
public static void main(String[] args) {
Path filePath = Paths.get("D:\\test\\b의개발공부기록\\b의개발공부기록.txt");
try {
Stream<String> stream = Files.lines(filePath, StandardCharsets.UTF_8);
stream.collect(Collectors.toList()).forEach(System.out::println);
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Stream<Path> list(Path dir)
디렉토리 내의 파일 및 디렉토리 목록을 스트림으로 반환합니다.
package test;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class example {
public static void main(String[] args) {
Path filePath = Paths.get("D:\\test\\b의개발공부기록\\");
try {
Stream<Path> dir = Files.list(filePath);
dir.forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
}
}
}
'STUDY > JAVA' 카테고리의 다른 글
[JAVA] 파일입출력 - File, FileInputStream, FileOutputStream (0) | 2023.11.23 |
---|---|
[JAVA] Base64 인코딩, 디코딩 (0) | 2023.11.20 |
[JAVA] 이스케이프 문자(escape sequence) 종류 (0) | 2023.11.20 |
[JAVA] JSONObject - key, value 출력하기 (0) | 2023.11.07 |
[JAVA] JSON to String / String to JSON (0) | 2023.11.07 |