Ruby File類實現操作檔案系統的方法

2021-08-09 22:45:48 字數 2913 閱讀 4145

1、檔案的開啟/關閉

通過io類的子類file類可以進行檔案的輸入、輸出處理。file類中封裝了檔案的刪除、檔案屬性變更等檔案專用的功能,而一些基本的輸入輸出處理則使用繼承自io類的方法.

io = file.open(file, mode)

io = open(file, mode)

通過file.open方法或open方法開啟檔案並獲取新的io物件。模式(mode)會指定以何種目的開啟檔案,預設模式為制度模式(「r」)。

(a)io.close    使用close方法關閉已開啟的檔案。1個程式中同時開啟檔案的數量是有限的,因此使用完的檔案要盡快關閉。如果開啟多個檔案而不進行關閉操作,程式就很可能會在使用open方法時突然產生異常。file.open 方法如果使用塊,則檔案會在使用完後自動關閉。這種情況下,io物件會被作為塊變數傳遞給塊。快執行完畢後,塊變數引用io物件也會自動關閉。這種寫法回事輸入/輸出範圍更加清晰。

file.open("test.txt") do |io|

while line =io.gets

......

endend

(b)io.closed?  用close?方法可以檢查io物件是否關閉了。
io = file.open("test.txt")

io.close

p io.closed? #>true

(c)file.read(file)    使用類方法read可以一次性讀取檔案file的內容

data = file.read("test.txt")
2、檔案輸入操作

(a)、io.gets(rs)/io.each(rs)/io.each_line(rs)/io.readlines(rs)   從io類的物件io中讀取一行資料。用引數rs的字串分行。預設rs時則用預定義變數$/(預設值為"\n")。

這些方法返回的字串中包含行末尾的換行符。用chmop!方法可以方便地刪除字串末尾的換行符。輸入完畢後再嘗試獲取資料時,gets方法會返回nil。另外,我們可使用eof?方法檢查輸入是否完畢。

while line = io.gets

line.chomp!

...... #對line進行操作

endp io.eof? #=>true

用each_line、readlines也可以實現同樣的效果

io.each_line do |line|

line.chomp!

...... #對line進行的操作

end

另外,用readlines方法返回存放每行資料的陣列

ary = io.readlines

ary.each_line do |line|

line.chomp!

...... #對line進行操作

end

(b)、io.lineno/io.lineno=(number)    使用gets方法、each_line方法逐行讀取資料時,會自動記錄讀取的行數。這個行數可以通過lineno方法取得。此外,通過lineno=方法也可以改變這個值,但值的改變並不會對檔案的指標有影響。

$stdin.each_line do |line|

printf("%3d %s", $stdin.lineno, line)

end

(c)、io.each_char    逐個字元地讀取io中的資料並執行塊。將得到的字元(string物件)作為塊變數傳遞。

io.each_char do |ch|

... #對line進行的操作

end

(d)、io.each_byte   逐個位元組地讀取io中的資料並啟動塊。將得到的位元組所對應的ascii碼以整數形式傳遞給塊變數。

(e)、io.getc  只讀取io中的乙個字元。根據檔案的編碼不同,有時乙個字元會由多個位元組組成,但這個方法只會讀取乙個字元,然後返回其字串物件。資料讀完繼續讀返回nil。

while  ch = io.getc

...... #對line進行操作

end

(f)、io.ungetc(ch)   將引數ch指定的字元退回到io的輸入緩衝中。

(g)、io.getbyte    只讀取io中的乙個位元組,返回得到的位元組轉換為ascii碼後的整數物件。資料全部讀取玩後再讀取時會返回nil。

(h)、io.ungetbyte(byte)  將引數byte指定的乙個位元組退回到輸入緩衝中。引數為整數時,將該整數除以256後的餘數作為ascii碼字元返回乙個位元組;引數為字串時,返回字串的第乙個位元組。

(i)、io.read(size)  讀取引數size指定的大小的資料。不指定大小時,則一次性讀取全部資料並返回。

3、輸出操作

(a)、io.puts(str0,str1,...)    對字串末尾新增換行符後輸出。指定多個引數時,會分別新增換行符。

(b)、io.putc(ch)   輸出引數ch指定的字元編碼所對應的字元。引數為字串時輸出首字元。

(c)、io.print(str0,str1,...)  輸出引數指定字串。引數可指定多個字串。引數為string 以外的物件時會自動將其轉換為字串。

(d)、io.printf(fmt,arg0,arg1,...)  按照指定格式輸出字串。

(e)、io.write(str)   輸出引數str指定的字串。引數為string以外的物件時會自動將其轉換為字串。方法返回值為輸出的位元組數。

(f)、io<< str   輸出引數str指定的字串。<< 會返回接受者本身

Path類 操作檔案類

path類 io命名空間 靜態類 不能建立物件類名.1 string str e c 程式設計基礎入門教程 第十一天 122 22 nee.txt 2 int index str.lastindexof 最後一出現的位置 3 str str.substring index 1 拿到最後乙個檔案 4 ...

fso操作檔案類

else open filename for output as number 覆蓋方式開啟檔案 end if print number,str close number 關閉 end sub 讀取所有行,返回字串陣列 function readalllines filename as string...

操作檔案File類方法

檔案操作 file.copy source targetfilename true 檔案拷貝 true 表示當檔案存在時 覆蓋 如果不加 true,則檔案存在報異常。file.exists 判斷檔案是否存在 file.move source target 移動 剪下 思考如何為檔案重新命名?檔案的剪...