하리Hari

파일 다루기

파일을 읽고 쓰는 [파일] 모듈을 알아봐요.

[파일] 모듈은 컴퓨터의 파일과 폴더를 읽고 써요. 브라우저는 보안상 사용자의 파일에 마음대로 접근할 수 없어서, 이 모듈은 컴퓨터에 설치해서 쓰는 Hana 런타임(터미널에서 스크립트를 돌리는 프로그램)으로 실행할 때만 쓸 수 있어요. 이 문서의 실행 버튼이나 플레이그라운드에서 가져오면 “‘파일’ 모듈은 브라우저에서 사용할 수 없어요.“라는 에러가 나는 게 정상이에요. 아래 예제는 내 컴퓨터의 Hana 런타임으로 .hr 파일을 만들어 돌려 보세요.

도구 하는 일
<읽기>(경로) 파일 내용을 글자로 돌려줘요
<줄읽기>(경로) 줄마다 나눈 목록으로 돌려줘요 (줄바꿈은 빼고, 마지막 빈 줄도 빼요)
<쓰기>(경로, 글) 파일을 만들거나 통째로 덮어써요
<덧붙이기>(경로, 글) 파일 끝에 이어 써요 (없으면 만들어요)
<있는지>(경로) 파일이나 폴더가 있는지 /거짓으로 알려줘요
<폴더인지>(경로) 폴더인지 알려줘요 (없으면 거짓)
<지우기>(경로) 파일이나 비어 있는 폴더를 지워요
<목록>(폴더) 폴더 안의 이름들을 정렬해서 목록으로 돌려줘요
<폴더만들기>(경로) 폴더를 만들어요 (위쪽 폴더도 없으면 함께, 이미 있어도 괜찮아요)
<옮기기>(옛경로, 새경로) 이름을 바꾸거나 옮겨요 (새 경로에 파일이 있으면 덮어써요)

경로는 Hana 런타임을 실행한 폴더를 기준으로 하고, 글은 UTF-8로 읽고 써요. 쓰기, 덧붙이기, 옮기기, 폴더만들기, 지우기는 비어있음을 돌려줘요.

[파일]에서 <쓰기>를 가져오자
[파일]에서 <덧붙이기>를 가져오자
[파일]에서 <읽기>를 가져오자
[파일]에서 <줄읽기>를 가져오자
[파일]에서 <지우기>를 가져오자

<쓰기>("메모.txt", "첫째 줄\n")을 실행하자
<덧붙이기>("메모.txt", "둘째 줄\n")을 실행하자
<읽기>("메모.txt")를 출력하자
<줄읽기>("메모.txt")를 출력하자
<지우기>("메모.txt")를 실행하자

없는 파일을 읽거나 폴더를 파일처럼 읽으면 에러가 나니 <있는지>로 먼저 확인하거나 일단 해보자로 감싸요.

[파일]에서 <있는지>를 가져오자
[파일]에서 <읽기>를 가져오자

만약 (<있는지>("설정.txt")) 라면:
    <읽기>("설정.txt")를 출력하자
그렇지 않다면:
    "설정 파일이 아직 없어요."를 출력하자

파일 접근 막기

Hana 런타임은 기본으로 파일 접근을 허용해요. 믿을 수 없는 스크립트를 돌릴 때는 실행할 때 --allow-file=false 옵션을 붙여 막을 수 있어요(--allow-file만 쓰거나 아무것도 붙이지 않으면 허용이에요). 막으면 [파일]의 모든 도구가 “이 실행에서는 파일 접근이 꺼져 있어요.“라는 에러를 내고 아무것도 읽거나 쓰지 않아요. 스크립트가 다른 .hr 파일을 가져오는 것("파일"에서 가져오자)은 언어의 기능이라 이 옵션과 상관없어요.

파일 경로를 붙이고 나누고 확장자를 바꾸는 일은 브라우저에서도 되는 [경로] 모듈이 도와줘요. 기본 문법 튜토리얼 12장에서 봐요.

놀이터
결과
코드를 작성하고 '실행' 버튼을 눌러보세요.