ทับทิมยื่นเข้าและส่งออก
ทับทิมให้ชุดของวิธีการ / O ที่เกี่ยวข้องกับการดำเนินการในเคอร์เนล (Kernel) โมดูลฉัน ทั้งหมดที่ฉันวิธีการ / 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
ตัวอย่าง
รหัสต่อไปนี้แสดงให้เห็นถึงวิธีการใช้คำสั่งที่ได้รับ รหัสจะแจ้งให้ผู้ใช้ป้อนค่าที่จะเก็บไว้ใน Val ตัวแปรสุดท้ายจะถูกพิมพ์ลงบน 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 อ่านบรรทัดจากวัตถุไฟล์
แต่ I / 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
คลาแฟ้มเป็นsubclass ของชั้น IO ระดับ IO นอกจากนี้ยังมีวิธีการบางอย่างสำหรับการจัดการไฟล์
IO.readlinesเป็นชั้น IO วิธีการ วิธีการก้าวหน้าผลตอบแทนที่เนื้อหาของแฟ้ม รหัสต่อไปนี้แสดงให้เห็นถึงวิธีการIO.readlinesใช้:
#!/usr/bin/ruby arr = IO.readlines("input.txt") puts arr[0] puts arr[1]
ในรหัสนี้ตัวแปรเป็น ARR อาร์เรย์ แต่ละแถวจะเป็นไฟล์ ARR อาร์เรย์input.txtองค์ประกอบ ดังนั้น ARR [0] จะมีบรรทัดแรกและ ARR [1] จะมีบรรทัดที่สองของไฟล์
วิธีIO.foreach
วิธีการส่งกลับการส่งออกมีความก้าวหน้าforeachระหว่างวิธีการที่แตกต่างกันและวิธีการreadline จะมีการเชื่อมโยงวิธีforeach บล็อก แต่แตกต่างจากวิธีการreadline จะวิธีforeach แทนที่จะกลับอาร์เรย์ ตัวอย่างเช่น:
#!/usr/bin/ruby IO.foreach("input.txt"){|block| puts block}
รหัสนี้จะทดสอบเนื้อหาของไฟล์ผ่านบล็อกก้าวหน้าตัวแปรแล้วออกจะปรากฏบนหน้าจอ
เปลี่ยนชื่อและลบไฟล์
คุณสามารถเปลี่ยนชื่อและลบไฟล์เปลี่ยนชื่อและลบวิธี
ตัวอย่างต่อไปนี้จะเปลี่ยนชื่อไฟล์ที่มีอยู่แล้วTest1.txt A:
#!/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
วิธี ftypeส่งกลับค่าต่อไปนี้เพื่อระบุชนิดของแฟ้ม: ไฟล์ไดเรกทอรี characterSpecial, blockSpecial, 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 A:
Dir["/usr/bin/*"]
สร้างไดเรกทอรี
Dir.mkdirสามารถนำมาใช้ในการสร้างไดเรกทอรี:
Dir.mkdir("mynewdir")
นอกจากนี้คุณยังสามารถตั้งค่าสิทธิ์บนไดเรกทอรีใหม่ (ไม่ไดเรกทอรีที่มีอยู่) เป็นลูกบุญธรรม mkdir:
หมายเหตุ: หน้ากาก 755 เจ้าของชุด (เจ้าของ) เป็นสมาชิกของกลุ่ม (Group) ทุกคน (โลก [ทุกคน]) สิทธิ์ rwxr-xr-X ที่ r = อ่านอ่าน W = เขียนเขียน x = ดำเนินการการดำเนินการ
Dir.mkdir( "mynewdir", 755 )
ลบไดเรกทอรี
Dir.deleteจะใช้ในการลบไดเรกทอรีDir.unlinkและDir.rmdirดำเนินการฟังก์ชันเดียวกันให้เรามีความสะดวกสบาย
Dir.delete("testdir")
สร้างไฟล์ชั่วคราวและไดเรกทอรี
ไฟล์ชั่วคราวที่ถูกสร้างขึ้นที่มีเพียงแค่อยู่ในขั้นตอนของการดำเนินการของโครงการ แต่ไม่ได้เก็บไว้ข้อมูลอย่างถาวร
Dir.tmpdirให้เส้นทางไดเรกทอรีชั่วคราวของระบบปัจจุบันซึ่งโดยค่าเริ่มต้น แต่ไม่พร้อมใช้งาน เพื่อให้Dir.tmpdirใช้ได้กับ '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)
รหัสนี้สร้างแฟ้มชั่วคราวในการที่จะเขียนข้อมูลและลบไฟล์ ห้องสมุดมาตรฐานทับทิมยังมีห้องสมุดชื่อtempfileของห้องสมุดสามารถนำมาใช้ในการสร้างแฟ้มชั่วคราว:
require 'tempfile' f = Tempfile.new('tingtong') f.puts "Hello" puts f.path f.close
Built-in ฟังก์ชั่น
ต่อไปนี้จะมีรายการที่สมบูรณ์ของไฟล์และไดเรกทอรีในรูบีในตัวฟังก์ชั่น: