Java에서 Directory를 만들고, 간단한 파일 쓰기, 읽기를 알아본다.
1. 디렉토리 만들기
File directory = new File("test/test");
if (!directory.exists()) {
boolean mkdirs = directory.mkdirs();
log.info("mkdirs = {}", mkdirs);
} else {
log.info("Already exist directory");
}
- mkdir() : 현재 폴더를 생성
- mkdirs(): 폴더 계층상 존재하지 않는 상위 부모 폴더까지 생성해줌
2. 파일 쓰기(BufferedWriter)
File file = new File("example.txt");
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file));
bufferedWriter.write("hello\nworld");
bufferedWriter.flush();
bufferedWriter.close();
- 여기에서 주의할 것이, File 생성자의 값으로 특정경로를 포함하는 파일명을 넘겼을 때, 해당 디렉토리가 존재하지 않으면
java.io.FileNotFoundException
을 발생한다. - FileWriter(File file, boolean append) 2번째 인자로 true값을 주면, 해당 File값에 append로 계속해서 데이터를 추가할 수 있다. 2번째 인자를 넘기지 않으면 새로운 파일을 만든다.
3. 파일 읽기 (BufferedReader)
File file = new File("example.txt");
BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
String data = bufferedReader.lines().collect(Collectors.joining("\n"));
4. 파일 읽기 Files (Java NIO)
4.1. Files.readAllLines(작은 파일을 읽을 때) - JDK1.7
Path path = Paths.get("example.txt");
// jdk 1.7, java nio pacakge
// Files.readAllLines (small file)
List<String> list = Files.readAllLines(path);
String collect = list.stream().collect(Collectors.joining(System.lineSeparator()));
System.out.println(collect);
4.2. Files.newBufferedReader(큰 파일을 읽을 때) - JDK1.7
// Files.newBufferedReader (large file)
BufferedReader bufferedReader = Files.newBufferedReader(path);
StringBuilder builder = new StringBuilder();
String line = bufferedReader.readLine();
while (line != null) {
builder.append(line);
builder.append(System.lineSeparator());
line = bufferedReader.readLine();
}
String result = builder.toString();
4.3. Files.lines() - JDK1.8
String result = Files.lines(path)
.collect(Collectors.joining(System.lineSeparator()));
- lines메서드는 파일의 모든 라인들을 읽어서 -> Stream
으로 리턴한다.
5. 참조
- https://www.baeldung.com/reading-file-in-java
📚 Related Posts
- Java partitioningBy 예제 코드: 데이터 분할 작업을 간편하게 해보자
- [Java] Stream 데이터 groupingBy 예제
- Jackson, LocalDateTime Serialization, Deserialization 이슈
- [Java] 정렬 API (Array, Collection, Comparator)
- [Java] 파일 입출력(BufferedWriter, BufferedReader, Files)
- [Java] CompletableFuture 사용 방법
- [Java] 날짜,시간의 역사와 LocalDateTime 살펴보기
- Modern Java in Action #2. 동작파라미터화 코드 전달하기
- [Java] Comparable vs Compartor 사용 방법
- [Java] 리플렉션(Reflection)이란?
- 다양한 예제로 알아보는 자바(Java) 역순 정렬