자바 - I/O 스트림: 초보자 가이드

안녕하세요, 자바 프로그래머를 꿈꾸는 여러분! 오늘, 우리는 자바 I/O 스트림의 세계로 흥미로운 여정을 떠날 거예요. 프로그래밍에 완전히 새로운 사람이라도 걱정하지 마세요 – 여러분의 친절한 가이드로서 저가 있으며, 저희는一小步一小步으로 이어갈 거예요. 이 튜토리얼을 끝내면, 여러분은 파일과 스트림을 전문가처럼 다룰 수 있을 거예요!

Java - I/O Streams

I/O 스트림이란?

들어가기 전에, I/O 스트림이란 무엇인지 이해해 보죠. 자바에서 스트림은 데이터의 시퀀스입니다. "I/O" 부분은 Input/Output를 의미합니다. 그래서, I/O 스트림은 자바가 파일, 네트워크 연결, 심지어 콘솔에 대한 읽기와 쓰기를 처리하는 방법입니다.

스트림을 강철로 흐르는 데이터의 강철이라고 생각해 보세요. 여러분은 다음二者중 하나를 할 수 있습니다:

  1. 강철(데이터)에서 물(데이터)를 꺼내는 것 (입력 스트림)
  2. 강철(데이터)에 물(데이터)를 집어넣는 것 (출력 스트림)

표준 스트림

자바는 우리에게 이미 설정되어 있는 세 가지 표준 스트림을 제공합니다:

  1. System.in (입력 스트림)
  2. System.out (출력 스트림)
  3. System.err (에러 출력 스트림)

간단한 예제로 시작해 보죠:

import java.util.Scanner;

public class HelloStream {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("당신의 이름은 무엇인가요? ");
String name = scanner.nextLine();
System.out.println("안녕, " + name + "!");
scanner.close();
}
}

이 예제에서는 System.in을 사용하여 사용자から 입력을 읽고, System.out을 사용하여 출력을 표시합니다. Scanner 클래스는 입력 스트림에서 쉽게 읽을 수 있게 도와줍니다.

파일 읽기 및 쓰기

이제 더 흥미로운 일 – 파일 작업으로 이동해 보죠!

파일에서 읽기

다음은 파일에서 읽는 방법입니다:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class FileReaderExample {
public static void main(String[] args) {
try (BufferedReader reader = new BufferedReader(new FileReader("example.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
System.err.println("오류가 발생했습니다: " + e.getMessage());
}
}
}

이 코드는 "example.txt" 파일을 줄 단위로 읽어서 각 줄을 콘솔에 인쇄합니다. try-with-resources 문은 파일을 읽고 난 후 올바르게 닫히도록 합니다.

파일에 쓰기

파일에 쓰는 것도 매우 쉽습니다:

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class FileWriterExample {
public static void main(String[] args) {
try (BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) {
writer.write("안녕, 파일 I/O!");
writer.newLine();
writer.write("이것은 새로운 줄입니다.");
} catch (IOException e) {
System.err.println("오류가 발생했습니다: " + e.getMessage());
}
}
}

이 코드는 "output.txt"라는 새 파일을 만들고 두 줄을 씁니다.

FileOutputStream

때로는 파일에 바이너리 데이터를 쓰는必要가 있을 수 있습니다. 그럴 때 FileOutputStream가 매우 유용합니다:

import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputStreamExample {
public static void main(String[] args) {
try (FileOutputStream fos = new FileOutputStream("binary.dat")) {
byte[] data = {65, 66, 67, 68, 69}; // A, B, C, D, E의 ASCII 값
fos.write(data);
} catch (IOException e) {
System.err.println("오류가 발생했습니다: " + e.getMessage());
}
}
}

이 예제는 "binary.dat" 파일에 바이너리 데이터를 씁니다.

파일 탐색 및 I/O

자바는 파일 및 디렉토리 경로를 작업하기 위해 File 클래스를 제공합니다. 다음은 예제입니다:

import java.io.File;

public class FileNavigationExample {
public static void main(String[] args) {
File file = new File("example.txt");
System.out.println("파일 존재 여부: " + file.exists());
System.out.println("파일 이름: " + file.getName());
System.out.println("절대 경로: " + file.getAbsolutePath());
}
}

이 코드는 File 클래스를 사용하여 파일에 대한 정보를 얻는 방법을 보여줍니다.

자바에서 디렉토리

파일처럼 디렉토리를 작업하는 것은 비슷합니다. 디렉토리를 만드는 방법을 살펴보죠:

import java.io.File;

public class DirectoryExample {
public static void main(String[] args) {
File dir = new File("newDirectory");
if (dir.mkdir()) {
System.out.println("디렉토리가 성공적으로 생성되었습니다!");
} else {
System.out.println("디렉토리 생성에 실패했습니다.");
}
}
}

이 코드는 현재 작업 디렉토리에 "newDirectory"라는 새 디렉토리를 만듭니다.

디렉토리 목록

마지막으로, 디렉토리의 내용을 나열하는 방법을 살펴보죠:

import java.io.File;

public class ListDirectoryExample {
public static void main(String[] args) {
File dir = new File(".");
String[] fileList = dir.list();
if (fileList != null) {
for (String fileName : fileList) {
System.out.println(fileName);
}
} else {
System.out.println("디렉토리가 존재하지 않거나 디렉토리가 아닙니다.");
}
}
}

이 코드는 현재 디렉토리의 모든 파일과 디렉토리를 나열합니다.

결론

축하합니다! 여러분은 자바 I/O 스트림의 세계로 첫 걸음을 내딛었습니다. 기본적인 입력/출력에서 파일 처리 및 디렉토리 작업까지 많은 것을 다루었습니다. 기억해요, 연습이 실력을 만든다는 말이 있습니다. 이러한 개념들을 실험해 보세요.

여기 우리가 사용한 메소드의 빠른 참조 표가 있습니다:

메소드 설명
Scanner.nextLine() 입력에서 텍스트 줄을 읽음
BufferedReader.readLine() 파일에서 텍스트 줄을 읽음
BufferedWriter.write() 파일에 문자열을 씀
BufferedWriter.newLine() 파일에 줄 구분자를 씀
FileOutputStream.write() 파일에 바이트를 씀
File.exists() 파일이 존재하는지 확인
File.getName() 파일의 이름을 가져옴
File.getAbsolutePath() 파일의 절대 경로를 가져옴
File.mkdir() 디렉토리를 생성
File.list() 디렉토리의 내용을 나열

코딩을 계속하고, 계속 배우며, 가장 중요한 것은 즐기세요! 기억해요, 모든 전문가는 한 번은 초보자였습니다. 즐거운 코딩 되세요!

Credits: Image by storyset