Ruby File
Contents
Directory
Open directory
open
dir = Dir.open("/usr/local/bin") dir.each{|file| puts file} dir.close
each is to enumerate files in dir
If you use block method, you don’t need close method
Dir.open("/usr/local/bin"){|dir| puts dir.path} # path : Directory path
Methods
Name | Description |
---|---|
pwd, getwd | Get current dir |
chdir | Change directory |
mkdir | Create new directory |
rmdir | Remove directory |
Examples
Dir.pwd Dir.chdir("/usr/local") #=> 0 Success Dir.mkdir("/tmp/homuhomu") #=> 0 Success Dir.rmdir("/tmp/homuhomu") #=> 0 Success
File
File class
Read file
file = File.open("Read.me") file.read # Read all data file.close
Set number of byte
file = File.open("README.md") file.read(100) # 100 bytes file.close
Block
File.open('README.md') { |file| file.read }
Read per line
gets
file = File.new("README.md", "r") while (line = file.gets) puts "#{line}" end file.close
Block
File.open("README.md", "r") do |file| while (line = file.gets) puts "#{line}" end end
Exception handle
mode
Mode | Description |
---|---|
r | Read |
w | Write |
a | Add |
r+ | Read and write |
w+ | Write and read |
a+ | Read and write and add mode |
write
File.open('new-file', "w"){|file| file.write("Hello World!") }
File attr
Name | Description |
---|---|
File.basename | Get file path |
File.dirname | Get directory name |
File.extname | Get index |
File.split | Get array including dir name and file name |
File.stat | Get File::Stat |
File.lstat | Get File::Stat |
File.atime | latest access time |
File.ctime | latest state change time |
File.mtime | latest update time |
File.path | Get file path |
File.join | Add File::SEPARATOR and create file path |
File.mtime('README.md') File.open('README'){|file| file.mtime}
If you use “.” as basename, you can get only file name.
FileTest module
Nmae | Description |
---|---|
File.exists? | Whether the file exists or not |
File.file? | The path is file or not |
File.directory? | Directory or not |
File.symlink? | Symbolic link or not |
File.executable? | Executable or not |
File.readable? | Readable or not |
File.writable? | Writable or not |
File.size | File size |
File.directory?('/usr/local') #=> true File.directory?('/usr/local/bin/zsh') #=> false
UNIX command?
Get file attr
File.chmod(0644, 'README')
Set latest access time and update time
File.utime(Time.now, Time.now, 'FIXME')
Convert path to absolute path
File.expand_path('README')
Remove file, rename
File.delete('README.md') File.rename('README', 'FIXME')
Truncate file
truncate file defined byte
File.truncate('FIXME', 0)
Lock
File.open('README', "w"){|file| file.flock(File::LOCK_EX)}
fileutil
Basic library of IO.
FileUtils is used like UNIX command
You need to add require
require 'fileutils'
Change directory(cd), current directory(pwd)
FileUtils.cd(dir, options={}) FileUtils.pwd
Copy(cp, copy, cp_r)
FileUtils.cp(src, dest, options={}) FileUtils.copy(src, dest, options={})
cp_r
FileUtils.cp_r(src, dst, options={})
recursive, you can use directory as src.
Move(mv/move)
FileUtils.mv(src, dist, options={}) FileUtils.move(src, dist, options={})
Remove(rm/remove)
FileUtils.rm(list, options={}) FileUtils.remove(list, options ={})
rmdir
rm_r, rm_rf
FileUtils.rm_r(list, options={}) FileUtils.rm_rf(list, options={})
touch
FileUtils.touch(list, options={})
mkdir
FileUtils.mkdir(list, options={}) FileUtils.mkdir_p(list, options={})
chown, chmod
FileUtils.chown(user, group, list, options={}) FileUtils.chmod(mode, list, options ={})
ln, ln_s/symlink
FileUtils.ln_s(src, dest, option ={}) FileUtils.symlink(src, dest, options={})