4.9 KiB
4.9 KiB
Ruby에서 파일 처리 및 입출력(IO) 다루기
프로그램을 작성하다 보면 데이터를 파일에 저장하거나, 파일에서 데이터를 읽어와야 할 때가 많다. Ruby에서는 파일을 간편하게 읽고 쓸 수 있는 다양한 기능을 제공한다. 이번 글에서는 파일 읽기/쓰기, 표준 입출력(STDIN, STDOUT, STDERR), 디렉터리 작업 등을 다룬다.
1. 파일 읽고 쓰기 (File 클래스)
Ruby에서 파일을 다룰 때는 File 클래스를 사용한다. 파일을 열 때는 File.open을 사용하며, 읽기 모드, 쓰기 모드 등을 지정할 수 있다.
1.1. 파일 쓰기 (w, a, w+, a+)
파일 새로 쓰기 (w 모드)
파일을 새로 생성하고 데이터를 저장한다. 기존 파일이 있으면 덮어쓴다.
File.open("example.txt", "w") do |file|
file.puts "Hello, Ruby!"
file.puts "파일 쓰기 예제입니다."
end
puts→ 문자열을 출력하고 자동으로 개행(\n) 추가write→ 개행 없이 그대로 출력
File.open("example.txt", "w") do |file|
file.write "Hello, Ruby!"
file.write "이건 개행이 없습니다."
end
출력 결과 (example.txt):
Hello, Ruby!이건 개행이 없습니다.
파일 이어 쓰기 (a 모드)
기존 파일이 있으면 내용을 유지하면서 새로운 내용을 추가한다.
File.open("example.txt", "a") do |file|
file.puts "새로운 줄이 추가됩니다."
end
읽기와 쓰기 (w+, a+ 모드)
w+→ 읽기 + 쓰기 가능, 기존 파일 삭제 후 새로 생성a+→ 읽기 + 쓰기 가능, 기존 내용 유지하며 추가 가능
1.2. 파일 읽기 (r, r+)
한 줄씩 읽기 (gets)
File.open("example.txt", "r") do |file|
puts file.gets # 첫 번째 줄 읽기
end
모든 줄 읽기 (readlines)
파일의 모든 줄을 배열로 읽어온다.
File.open("example.txt", "r") do |file|
file.readlines.each do |line|
puts line
end
end
파일 전체 읽기 (read)
파일 내용을 한 번에 읽어 문자열로 반환한다.
content = File.read("example.txt")
puts content
파일 존재 여부 확인
if File.exist?("example.txt")
puts "파일이 존재합니다!"
else
puts "파일이 없습니다."
end
2. 파일 삭제 및 기타 기능
2.1. 파일 삭제
File.delete("example.txt") if File.exist?("example.txt")
2.2. 파일 이름 변경
File.rename("old_name.txt", "new_name.txt")
2.3. 파일 크기 확인
puts File.size("example.txt") # 바이트 단위 크기 반환
3. 표준 입출력 (STDIN, STDOUT, STDERR)
3.1. 콘솔 입력 (STDIN)
사용자로부터 입력을 받을 때는 gets를 사용한다.
puts "이름을 입력하세요:"
name = gets.chomp # 개행 문자 제거
puts "안녕하세요, #{name}님!"
3.2. 표준 출력 (STDOUT)
puts, print, p를 이용해 출력할 수 있다.
puts "Hello, Ruby!" # 개행 포함
print "Hello, " # 개행 없음
print "World!\n"
p [1, 2, 3] # 디버깅용 출력
출력 결과:
Hello, Ruby!
Hello, World!
[1, 2, 3]
3.3. 오류 출력 (STDERR)
오류 메시지는 STDERR.puts를 사용해 출력할 수 있다.
STDERR.puts "이건 오류 메시지입니다!"
4. 디렉터리 작업 (Dir 클래스)
4.1. 디렉터리 생성 및 삭제
Dir.mkdir("my_folder") unless Dir.exist?("my_folder") # 폴더 생성
Dir.rmdir("my_folder") # 폴더 삭제 (비어있을 때만 가능)
4.2. 디렉터리 내 파일 목록 조회
puts Dir.entries(".") # 현재 디렉터리의 파일 및 폴더 목록 출력
5. 실전 예제: 로그 파일 기록기
class Logger
LOG_FILE = "log.txt"
def self.log(message)
File.open(LOG_FILE, "a") do |file|
file.puts("[#{Time.now}] #{message}")
end
end
end
Logger.log("프로그램이 실행되었습니다.")
Logger.log("사용자가 로그인했습니다.")
출력 (log.txt):
[2025-03-03 12:34:56] 프로그램이 실행되었습니다.
[2025-03-03 12:35:10] 사용자가 로그인했습니다.
6. 마무리
Ruby에서는 파일과 입출력을 간편하게 다룰 수 있다.
- 파일 쓰기 →
"w","a","w+","a+"모드 - 파일 읽기 →
gets,readlines,read - 파일 관리 →
File.exist?,File.delete,File.rename,File.size - 입출력(IO) →
gets로 입력 받기,puts로 출력,STDERR.puts로 오류 출력 - 디렉터리 작업 →
Dir.mkdir,Dir.entries
이제 Ruby에서 파일을 활용하여 로그 기록, 데이터 저장, 설정 파일 관리 등을 할 수 있다.