루비는 입력 및 출력 파일
루비는 커널 (커널) 모듈로 구현 I / O 관련 메소드 세트를 제공합니다. 모든 I / O 방법은 IO 클래스로부터 파생된다.
IO는읽기, 쓰기, 도착, 풋, 모든 클래스 기반의 접근 방식 제공 작성한 Readline, getc 그룹과의 printf를.
이 섹션에서는 가능한 모든 루비 기반의 I / O 기능을 설명합니다. 더 많은 기능을 위해, 루비의IO 클래스를참조하십시오.
문을둔다
이전 섹션에서는 변수에 할당 한 다음둔다 문출력을 사용합니다.
문은 프로그램 변수에 저장된 값을 표시 나타냅니다넣습니다.이것은 각 줄의 끝에 새 행을 추가합니다.
예
#!/usr/bin/ruby val1 = "This is variable one" val2 = "This is variable two" puts val1 puts val2
위의 예제 출력은 실행
This is variable one This is variable two
문을얻는다
문 STDIN 불리는 표준 화면에서 사용자의 입력을 얻기 위하여 이용 될 수얻는다.
예
다음 코드는 문을 얻는다 사용하는 방법을 보여줍니다. 코드는 변수 발에 저장됩니다 값을 입력하라는 메시지를 표시합니다, 마지막은 STDOUT에 인쇄됩니다.
#!/usr/bin/ruby puts "Enter a value :" val = gets puts val
위의 예제 출력은 실행
Enter a value : This is entered value This is entered value
putc 문
그리고putc문을 출력하는 문자 시퀀스를 사용할 수 있지만 성명, 화면 전체 문자열의출력을두고,다른 문장을둔다.
예
다음 코드 만 문자 H의 출력 :
#!/usr/bin/ruby str="Hello Ruby!" putc str
위의 예제 출력은 실행
H
인쇄 문
문을인쇄하고유사한 문을넣습니다.유일한 차이점은 문둔다후프린트명령문의 사용은, 커서가 동일 선상에 위치되는 동안 출력은 다음 라인으로 이동한다는 것이다.
예
#!/usr/bin/ruby print "Hello World" print "Good Morning"
위의 예제 출력은 실행
Hello WorldGood Morning
열기 및 파일 닫기
지금, 당신은 읽고 표준 입력과 출력에 기록합니다. 이제, 우리는 어떻게 실제 데이터 파일을 볼 것이다.
File.new 방법
당신은파일 객체가,File.new 방법을 읽기, 쓰기 또는 읽기 및 쓰기, 읽기 모드 매개 변수에 따라 권한을 작성하는 데 사용됩니다 만들 수 있습니다. 마지막으로, 당신은 파일을 닫습니다File.close의방법을 사용할 수 있습니다.
문법
aFile = File.new("filename", "mode") # ... 处理文件 aFile.close
File.open 방법
당신은File.open 방법을사용하여 새 파일 개체를 만들 수 있고, 객체는 파일 파일에 할당됩니다. 그러나File.open과File.new 방법 사이에 하나의 차이가있다. 차이는File.open 방법File.new 방법 블록과 연관된 아닌 수이다.
File.open("filename", "mode") do |aFile| # ... process the file end
다음 표는 다른 모드에서 열려있는 파일을 나열합니다 :
模式 | 描述 |
---|---|
r | 只读模式。文件指针被放置在文件的开头。这是默认模式。 |
r+ | 读写模式。文件指针被放置在文件的开头。 |
w | 只写模式。如果文件存在,则重写文件。如果文件不存在,则创建一个新文件用于写入。 |
w+ | 读写模式。如果文件存在,则重写已存在的文件。如果文件不存在,则创建一个新文件用于读写。 |
a | 只写模式。如果文件存在,则文件指针被放置在文件的末尾。也就是说,文件是追加模式。如果文件不存在,则创建一个新文件用于写入。 |
a+ | 读写模式。如果文件存在,则文件指针被放置在文件的末尾。也就是说,文件是追加模式。如果文件不存在,则创建一个新文件用于读写。 |
파일을 읽기 및 쓰기
단순한 I / O를위한 방법은 모든 파일 객체에 대해 사용될 수있다. 그래서, 도착 표준입력에서라인을읽고,aFile.gets aFile 변수는 파일 객체로부터 라인을 읽습니다.
그러나, 나는 / O 객체는 접근 방법의 추가 세트를 제공 편리함으로 우리를 제공합니다.
sysread방법
사용자는 파일의 내용을 읽어sysread 방법을사용할수있다.메소드 sysread를 사용하면 파일을 열 수있는 하나의 모드를 사용할 수 있습니다. 예를 들면 :
다음은 입력 텍스트 파일 :
This is a simple text file for testing purpose.
지금의 파일을 읽으려고하자 :
#!/usr/bin/ruby aFile = File.new("input.txt", "r") if aFile content = aFile.sysread(20) puts content else puts "Unable to open file!" end
이 문은 파일의 처음 20 문자를 입력합니다. 파일 포인터는 파일 (21) 문자 위치에 배치됩니다.
SYSWRITE방법
당신은 파일에 기록하는 방법SYSWRITE를사용할 수 있습니다. 메소드 SYSWRITE를 사용하는 경우, 당신은 쓰기 모드로 파일을 열어야합니다. 예를 들면 :
#!/usr/bin/ruby aFile = File.new("input.txt", "r+") if aFile aFile.syswrite("ABCDEF") else puts "Unable to open file!" end
문은 파일에 "ABCDEF"를 작성됩니다.
each_byte 방법
이 방법은 클래스파일에 속한다.Each_byte 반복 방법은 문자열의 각 문자에 할 수있다. 다음 코드 예제를 고려하십시오
#!/usr/bin/ruby aFile = File.new("input.txt", "r+") if aFile aFile.syswrite("ABCDEF") aFile.rewind aFile.each_byte {|ch| putc ch; putc ?. } else puts "Unable to open file!" end
이어서 문자 변수는 CH를 통과하고 다음과 같이 화면에 표시된다 :
A.B.C.D.E.F.s. .a. .s.i.m.p.l.e. .t.e.x.t. .f.i.l.e. .f.o.r. .t.e.s.t.i.n.g. .p.u.r.p.o.s.e...
IO.readlines 방법
File클래스는 클래스 IO의 서브 클래스입니다. IO 클래스는 파일을 조작하기위한 몇 가지 방법이 있습니다.
IO.readlines는IO 클래스 방법이다. 진보적 인 방법은, 파일의 내용을 리턴한다. 다음 코드는IO.readlines 사용하는방법을 보여줍니다
#!/usr/bin/ruby arr = IO.readlines("input.txt") puts arr[0] puts arr[1]
이 코드에서 변수는 배열 도착합니다. 각 행은 요소input.txt를배열 도착 파일입니다. 따라서, 도착 [0] 첫 번째 줄이 포함되며, 도착 [1] 파일의 두 번째 줄이 포함됩니다.
IO.foreach 방법
상기 방법은 또한 프로그레시브 출력을 리턴한다. 다른 방법과 방법의readlines 메쏘드사이의 Foreach는 방법foreach는블록을 연결되어 있습니다. 그러나, 대신 배열을 반환하는 방법readlines 메쏘드,foreach는 방법과는 달리. 예를 들면 :
#!/usr/bin/ruby IO.foreach("input.txt"){|block| puts block}
파일 내용을테스트코드는 출력 화면에 표시되는 변수 프로그레시브 블록을 통과시켰다.
이름 바꾸기와 파일을 삭제
당신은 이름을 변경하고 파일이름을 변경하고방법을삭제삭제할 수 있습니다.
다음의 예는이미있는 test1.txt을존재하는 파일의 이름을 변경합니다:
#!/usr/bin/ruby # 重命名文件 test1.txt 为 test2.txt File.rename( "test1.txt", "test2.txt" )
다음의 예는 기존의 파일test2.txt가 삭제합니다 :
#!/usr/bin/ruby # 删除文件 test2.txt File.delete("text2.txt")
파일 모드 및 소유권
마스크 패턴이나 파일 권한 / 액세스 목록과 방법을 변경chmod를 사용:
마스크 값에 대한 기존의 파일TEST.TXT 모델을다음과 같이 변경의 예 :
#!/usr/bin/ruby file = File.new( "test.txt", "w" ) file.chmod( 0755 )
다음 표는chmod를방법을 사용할 수있는 다른 마스크를 나열합니다 :
掩码 | 描述 |
---|---|
0700 | rwx 掩码,针对所有者 |
0400 | r ,针对所有者 |
0200 | w ,针对所有者 |
0100 | x ,针对所有者 |
0070 | rwx 掩码,针对所属组 |
0040 | r ,针对所属组 |
0020 | w ,针对所属组 |
0010 | x ,针对所属组 |
0007 | rwx 掩码,针对其他人 |
0004 | r ,针对其他人 |
0002 | w ,针对其他人 |
0001 | x ,针对其他人 |
4000 | 执行时设置用户 ID |
2000 | 执行时设置所属组 ID |
1000 | 保存交换文本,甚至在使用后也会保存 |
문서 액세스
다음 명령은 파일이 이미 존재하는 열기 전에 파일을 확인합니다 :
#!/usr/bin/ruby File.open("file.rb") if File::exists?( "file.rb" )
다음 명령은 파일이 실제로 파일인지 여부를 질의합니다 :
#!/usr/bin/ruby # 返回 true 或false File.file?( "text.txt" )
지정된 파일 이름이 있는지 여부를 확인하기 위해 명령을 따르는 것은 디렉토리입니다 :
#!/usr/bin/ruby # 一个目录 File::directory?( "/usr/local/bin" ) # => true # 一个文件 File::directory?( "file.rb" ) # => false
다음 명령을 읽을 수, 쓰기, 실행 파일을 확인할 수 있습니다 :
#!/usr/bin/ruby File.readable?( "test.txt" ) # => true File.writable?( "test.txt" ) # => true File.executable?( "test.txt" ) # => false
다음 명령은 제로로 파일 크기를 확인합니다 :
#!/usr/bin/ruby File.zero?( "test.txt" ) # => true
다음 명령은 파일의 크기를 반환합니다 :
#!/usr/bin/ruby File.size?( "text.txt" ) # => 1002
다음 명령은 파일의 종류를 확인하는데 사용된다 :
#!/usr/bin/ruby File::ftype( "test.txt" ) # => file
파일, 디렉토리, characterSpecial, blockSpecial :FTYPE 방법은파일의종류를 식별하기 위해 다음의 값을 반환 , FIFO, 링크, 소켓또는 알 수 있습니다.
다음 명령은 생성 된 파일을 확인하는 데 사용, 수정 또는 마지막 액세스 시간입니다 :
#!/usr/bin/ruby File::ctime( "test.txt" ) # => Fri May 09 10:06:37 -0700 2008 File::mtime( "text.txt" ) # => Fri May 09 10:44:44 -0700 2008 File::atime( "text.txt" ) # => Fri May 09 10:45:01 -0700 2008
루비 디렉토리
모든 파일이 디렉토리에 포함되어, 루비 프로세스 파일 및 디렉토리을 제공합니다. 작업 디렉토리에 대한파일,디렉터리 클래스를 사용한 작업 클래스파일.
카탈로그를 찾아
루비 프로그램의 디렉토리를 변경하려면Dir.chdir을사용하시기바랍니다.현재 디렉토리에 다음과 같이 변경의예는 / usr / bin에 있습니다.
Dir.chdir("/usr/bin")
당신은 현재 디렉토리Dir.pwd를볼 수 있습니다
puts Dir.pwd # 返回当前目录,类似 /usr/bin
당신은Dir.entries 지정된디렉토리 내의 파일과 디렉토리의 목록을 사용할 수 있습니다 :
puts Dir.entries("/usr/bin").join(' ')
Dir.entries 모든지정된 디렉토리를 포함하는 배열을 반환합니다.Dir.foreach 동일한기능을 제공한다 :
Dir.foreach("/usr/bin") do |entry| puts entry end
보다 간결한 방식의 디렉토리 목록은 디렉터리 클래스 배열을 사용하여하는 방법이다 얻을 :
Dir["/usr/bin/*"]
디렉토리를 작성
Dir.mkdir 디렉토리를생성 할 수 있습니다 :
Dir.mkdir("mynewdir")
또한 MKDIR을 채택 새 디렉토리 (안 기존 디렉토리)에 대한 사용 권한을 설정할 수 있습니다 :
참고 : 755 세트 소유자 (owner)를 마스크 그룹 (그룹)에 속하는 모든 사람 (세계 [사람]) 권한를 rwxr-XR-X r은 =, X 쓰기 = 승 읽기, 읽기, 쓰기 = 실행을 실행합니다.
Dir.mkdir( "mynewdir", 755 )
디렉토리를 제거
디렉터리를 삭제하는데 사용될 수Dir.delete.Dir.unlink 및Dir.rmdir는동일한 기능을 수행 편리함으로 우리를 제공합니다.
Dir.delete("testdir")
임시 디렉토리 파일 만들기 &
임시 파일은 프로그램의 실행 과정에서 단순히이 생성되지만, 영구적으로 정보를 저장하지 않는다.
Dir.tmpdir 사용할 수없습니다 기본적으로하지만, 현재 시스템 임시 디렉토리에 대한 경로를 제공합니다. 필요한 'TMPDIR이'필요로Dir.tmpdir 사용할 수있도록합니다.
당신은Dir.tmpdir수File.join는플랫폼 독립적 임시 파일을 만드는 데 함께 사용 :
require 'tmpdir' tempfilename = File.join(Dir.tmpdir, "tingtong") tempfile = File.new(tempfilename, "w") tempfile.puts "This is a temporary file" tempfile.close File.delete(tempfilename)
이 코드는 데이터를 기록하고 파일을 삭제하는 임시 파일을 만듭니다. 루비 표준 라이브러리는 또한 임시 파일을 만드는 데 사용할 수있는 라이브러리의임시 파일이름이 라이브러리가 포함되어 있습니다
require 'tempfile' f = Tempfile.new('tingtong') f.puts "Hello" puts f.path f.close
내장 기능
다음은 Ruby의 내장 함수에있는 파일 및 디렉토리의 전체 목록을 제공합니다 :