[JAVA] 파일과 디렉토리

FE.1·2024년 4월 11일
4
post-thumbnail

File 클래스(IO 스펙)


  • 파일 및 디렉토리의 경로를 표현하고, 관련 작업을 처리하는 데 사용한다.

  • java.io 패키지에 포함되어 있다.

  • File 객체를 생성할 때는 파일이나 디렉토리의 경로를 인자로 전달해줘야 한다.


파일 및 디렉토리 생성, 삭제, 조회

public class FileRunner {

	public static void main(String[] args) {
		// 파일 생성
		File file = new File("test.txt"); // 생성할 파일명
		try {
			boolean isCreated = file.createNewFile();
			System.out.println("isCreated = " + isCreated);
		}catch (IOException e){
			e.printStackTrace();
		}

		// 디렉터리 생성
		File directory = new File("./src/resources"); // 생성할 디렉토리명
		boolean isDirectoryCreated = directory.mkdir();
		System.out.println("isDirectoryCreated = " + isDirectoryCreated);

		// 파일 및 디렉터리 삭제
		boolean isFileDeleted = file.delete();
		System.out.println("isFileDeleted = " + isFileDeleted);

		// 디렉터리 내 파일 목록 조회
		File[] files = directory.listFiles();
		for (File f : files) {
			System.out.println(f.getName());
		}
	}
}

파일 입출력

  • 스트림을 사용하여 파일 입출력 작업을 수행할 수 있다.

  • FileReader, FileWriter, FileInputStream, FileOutputStream 등의 클래스를 사용하여 파일로부터 데이터를 읽거나 쓸 수 있다.

resources/data.txt 미리 만들어 놓기

123, 132
cheolcheol
Apple
Bat
Cat
// 파일 읽기
BufferedReader br = new BufferedReader(new FileReader("./resources/data.txt"));
String line;
while((line = br.readLine()) != null) {
	System.out.println(line);
}
br.close();

// 파일 쓰기
BufferedWriter bw = new BufferedWriter(new FileWriter("./resources/output.txt"));
bw.write("Hellooooooo!");
bw.close();

resources/output.txt 생성 됨

Hellooooooo!

Path 인터페이스, Paths 클래스, Files 클래스 (NIO 스펙)


Path, Paths, Files 자바7에서 추가된 java.nio.file 패키지에 포함되어 있다.

Path

  • 파일 또는 디렉토리의 경로를 표현한다.

  • 파일 시스템 내의 경로를 추상화한 것으로, 파일을 읽고, 쓰고, 관리할 때 필요한 경로 정보를 제공한다.

Paths

  • Path 인스턴스를 생성하는 데 사용되는 유틸리티 클래스

  • 주로 Paths.get()를 통해 문자열 경로를 Path 객체로 변환할 때 사용한다.

Files

  • Files 클래스는 파일 및 디렉토리를 생성, 삭제, 읽기, 쓰기 등을 포함한 다양한 파일 관련 작업을 수행하는 정적 메서드들을 제공한다.

    • Path 객체를 사용하여 이러한 작업을 수행한다.

파일 관련 기능

public class FileExample {

	public static void main(String[] args) {
		try {
			// 파일 경로 생성
			Path filePath = Paths.get("./resources/example.txt");

			// 파일 생성
			if (!Files.exists(filePath)) {
				Files.createFile(filePath);
				System.out.println("File created: " + filePath.toString());
			} else {
				System.out.println("File already exists: " + filePath.toString());
			}

			// 파일에 내용 쓰기
			List<String> content = List.of("Hello", "Nice to meet you", "Bye");
			Files.write(filePath, content);
			System.out.println("Content written to file");

			// 파일 내용 읽기
			// String fileContent = new String(Files.readAllBytes(filePath));
			// System.out.println("File content: " + fileContent);
			System.out.println("------content start------");
			Files.lines(filePath)
				.forEach(System.out::println);
			System.out.println("------content end------");

			// 파일 삭제
			Files.delete(filePath);
			System.out.println("File deleted");

		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}
}

디렉토리 관련 기능

public class DirectoryExample {

	public static void main(String[] args) throws IOException {
		Path dirPath = Paths.get(".");

		// 기준 디렉토리에서 존재하는 디렉토리 출력
		Files.list(dirPath)
			.forEach(System.out::println);

		// 기준 디렉토리에서 4단계 내부 디렉토리에 존재하는 .java 파일들 출력
		Files.walk(dirPath, 4)
			.filter(path -> String.valueOf(path).contains(".java"))
			.forEach(System.out::println);

		// find는 filter보다 더 나은 필터 기능(attributes)을 제공한다.
		Files.find(dirPath,
			4,
			(path, attributes) -> String.valueOf(path).contains(".java")
		).forEach(System.out::println);

	}
}
profile
공부하자!

0개의 댓글