您的位置:首页 > 编程语言 > Ruby

Ruby 操作文件大全

2017-09-11 09:27 225 查看
1.创建文件夹 

Dir.new %%1 

Dir::mkdir #不指定目录全名称时,缺省为工作目录 

Dir::chdir() 改变当前脚本工作目录 

FileUtils.mkdir 'test' 

file = File.new("cmd.txt") 

file.each do |line| 

puts line if line =~ /target/ 

end 

2.创建文件 

改变当前根目录 

Dir.chdir("/home/guy/sandbox/tmp")  

  

Dir.chroot("/home/guy/sandbox") 

Dir.new %%1 

#Dir::rmdir #不指定目录全名称时,缺省为工作目录 

3.删除文件 

改变当前根目录 

Dir.chdir("/home/guy/sandbox/tmp")  

Dir.chroot("/home/guy/sandbox") 

Dir.new %%1 

#Dir::rmdir #不指定目录全名称时,缺省为工作目录 

4.删除文件夹 

#require 'fileutils'  

FileUtils.rm_r(%%1) 

5.删除一个文件下夹所有的文件夹 

Dir::chdir 

Dir::pwd属性或者Dir.getwd() 

#改变当前脚本工作目录 

6.清空文件夹 

Dir::chdir %%1 改变当前脚本工作目录 

Dir::rmdir #不指定目录全名称时,缺省为工作目录 

Dir.new %%1 

#require 'ftools' 

FileUtils.mkdir 'test' 

file = File.new(%%1)  #"cmd.txt" 

file.each do |line| 

puts line if line =~ /target/ 

end 

7.读取文件 

#require 'ftools' 

File.open(%%1).readlines #'文件名' 

#require 'ftools' 

arr = IO.readlines(%%1)  #"myfile" 

lines = arr.size 

#puts "myfile has #{lines} lines in it." 

#longest = arr.collect {|x| x.length}.max 

#puts "The longest line in it has #{longest} characters." 

8.写入文件 

f=open(%%1,"w") 

f.puts(%%2) 

9.写入随机文件 

#require 'ftools' 

file = File.open(%%1,"w")  

file.seek(5)  

str = file.gets # "fghi" 

#require 'ftools' 

File.open('文件名') 

File.open("cmd.txt","r") do |file| 

while line=file.gets 

puts line 

end 

end 

puts 

file=File.new("cmd.txt","r") 

file.each_line do |line| 

puts line 

end 

IO.foreach("cmd.txt") do |line| 

puts line if line =~ /target/ 

puts line if line !~ /target/ 

end 

### 

Dir#pos 

返回当前子文件指针 

Dir#pos= 

设置子文件指针 

Dir#rewind 

设置子文件指针到起始位置 

Dir#seek 

设置子文件指针 

Dir#tell 

获取当前指针 

10.读取文件属性 

#文件中是否有内容,(返回false为有内容,返回true为空) 

File.new('文件名').stat.zero? 

#文件大小 

File.size?('文件名') 

flag1 = FileTest::zero?("file1") 

flag2 = FileTest::size?("file2") 

size1 = File.size("file1") 

size2 = File.stat("file2").size 

### 

File::atime(filename) 

返回指定文件的最后访问时间 

11.写入属性 

12.枚举一个文件夹中的所有文件夹 

#require 'ftools' 

puts Dir.glob('**/*').each { | file | file.downcase } 

#要区分目录和普通文件我们这样使用 

file1 = File.new("/tmp") 

file2 = File.new("/tmp/myfile") 

test1 = file1.directory? # true 

test2 = file1.file? # false 

test3 = file2.directory? # false 

test4 = file2.file? # true 

### 

遍历目录 

Dir.foreach(%%1) { |entry| puts entry} 

13.复制文件夹 

require "fileutils" 

FileUtils.cp %%1,%%2 

14.复制一个目录下所有的文件夹到另一个文件夹下 

#require 'FileUtils' 

list=Dir.entries(%%1) 

list.each_index do |x| 

FileUtils.cp "#{list[x]}",%%2 if !File.directory?(list[x]) 

end 

15.移动文件夹 

#require 'FileUtils' 

FileUtils.mv %%1,%%2 

16.移动一个目录下所有的文件夹到另一个目录下 

#require 'FileUtils' 

list=Dir.entries(%%1) 

list.each_index do |x| 

FileUtils.mv "#{list[x]}",%%2 if !File.directory?(list[x]) 

end

 

17.以一个文件夹的框架在另一个目录创建文件夹和空文件 

######################### 

//文件是否存在 

File.exist?('文件名') 

flag = FileTest::exist?("LochNessMonster") 

flag = FileTest::exists?("UFO") 

######################### 

require 'rubygems' 

require 'ruby-debug' 

require "find" 

module Cz_dirtools 

def mkdirs_to(tar,src=Dir.getwd) 

#debugger 

if tar.class==NilClass then 

puts "PLZ input target directory name..." 

return 

elsif !FileTest.directory?(tar)#如果tar不是一个目录 

puts ("Creating #{File.expand_path(tar)}") 

Dir.mkdir("#{File.expand_path(tar)}")#创建tar目录 

end 

src=if FileTest.directory?(src) then 

src#如果src是一个目录名,则返回自身 

else 

File.dirname(src)#如果src为一个文件名,则返回该文件所在目录 

end 

#Dir.foreach可以复制目标路径第一层目录结构而不复制子目录 

#~ Dir.foreach(src) do |dir| 

#~ if FileTest.directory?(dir) && dir!=tar && dir!='..' &&dir!='.' then #忽略自身,忽略上级目录"..",忽略本级目录"." 

#~ #puts dir 

#~ begin 

#~ Dir.mkdir("#{File.expand_path(tar)}/#{dir}") 

#~ rescue#如果该目录已存在则直接跳过否则创建该目录 

#~ end 

#~ end 

#~ end 

#Find.find可以复制目标路径的完整目录结构,包括子目录 

dirs=Array.new 

Find.find(src) do |dir| 

unless !FileTest.directory?(dir) || File.basename(dir)==tar || File.basename(dir)=='..' || File.basename(dir)=='.' || File.basename(dir)==File.basename(src)#忽略自身,忽略上级目录"..",忽略本级目录"." 

dirs<<dir 

end 

end 

#puts dirs 

dirs.each do |dir| 

begin 

Dir.mkdir("#{File.expand_path(tar)}/#{dir.gsub(src,'')}") 

rescue#如果该目录已存在则直接跳过否则创建该目录 

end 

end 

end 

end 

require 'rubygems' 

require 'ruby-debug' 

require "find" 

module Cz_dirtools 

def mkdirs_to(tar,src=Dir.getwd) 

#debugger 

if tar.class==NilClass then 

puts "PLZ input target directory name..." 

return 

elsif !FileTest.directory?(tar)#如果tar不是一个目录 

puts ("Creating #{File.expand_path(tar)}") 

Dir.mkdir("#{File.expand_path(tar)}")#创建tar目录 

end 

src=if FileTest.directory?(src) then 

src#如果src是一个目录名,则返回自身 

else 

File.dirname(src)#如果src为一个文件名,则返回该文件所在目录 

end 

#Dir.foreach可以复制目标路径第一层目录结构而不复制子目录 

#~ Dir.foreach(src) do |dir| 

#~ if FileTest.directory?(dir) && dir!=tar && dir!='..' &&dir!='.' then #忽略自身,忽略上级目录"..",忽略本级目录"." 

#~ #puts dir 

#~ begin 

#~ Dir.mkdir("#{File.expand_path(tar)}/#{dir}") 

#~ rescue#如果该目录已存在则直接跳过否则创建该目录 

#~ end 

#~ end 

#~ end 

#Find.find可以复制目标路径的完整目录结构,包括子目录 

dirs=Array.new 

Find.find(src) do |dir| 

unless !FileTest.directory?(dir) || File.basename(dir)==tar || File.basename(dir)=='..' || File.basename(dir)=='.' || File.basename(dir)==File.basename(src)#忽略自身,忽略上级目录"..",忽略本级目录"." 

dirs<<dir 

end 

end 

#puts dirs 

dirs.each do |dir| 

begin 

Dir.mkdir("#{File.expand_path(tar)}/#{dir.gsub(src,'')}") 

rescue#如果该目录已存在则直接跳过否则创建该目录 

end 

end 

end 

end 

18.复制文件 

#require 'FileUtils' 

FileUtils.cp %%1, %%2 

19.复制一个目录下所有的文件到另一个目录 

#require 'FileUtils' 

list=Dir.entries(%%1) 

list.each_index do |x| 

FileUtils.cp "#{list[x]}",%%2 if !File.directory?(list[x]) 

end 

20.提取扩展名 

21.提取文件名 

%%2 = File.basename(%%1) 

22.提取文件路径 

%%2 = File.dirname(%%1) 

23.替换扩展名 

24.追加路径 

25.移动文件 

26.移动一个文件夹下所有文件到另一个目录 

#require 'FileUtils' 

list=Dir.entries(%%1) 

list.each_index do |x| 

FileUtils.mv "#{list[x]}",%%2 if !File.directory?(list[x]) 

end 

27.指定目录下搜索文件 

#require "find"  

  

def findfiles(dir, name)  

 list = []  

 Find.find(dir) do |path|  

  Find.prune if [".",".."].include? path  

  case name  

   when String  

    list << path if File.basename(path) == name  

   when Regexp  

    list << path if File.basename(path) =~ name  

  else  

   raise ArgumentError  

  end  

 end  

 list  

end  

  

findfiles %%1,%%2 #"/home/hal", "toc.txt" 

28.打开对话框 

29.文件分割 

逐字节对文件进行遍历 

  可以使用each_byte方法,如果你想要转换byte到字符的话使用chr方法: 

file = File.new("myfile")  

e_count = 0  

file.each_byte do |byte|  

 e_count += 1 if byte == ?e  

end 

30.文件合并 

逐字节对文件进行遍历 

  可以使用each_byte方法,如果你想要转换byte到字符的话使用chr方法: 

file = File.new("myfile")  

e_count = 0  

file.each_byte do |byte|  

 e_count += 1 if byte == ?e  

end  

31.文件简单加密 

32.文件简单解密 

33.读取ini文件属性 

34.合并一个文件下所有的文件 

35.写入ini文件属性 

36.获得当前路径 

File.dirname($0) 

37.读取XML数据库 

38.写入XML数据库 

39.ZIP压缩文件 

#require 'rubygems'  

#require 'zip/zipfilesystem' 

Zip::ZipFile.open(%%1, Zip::ZipFile::CREATE) do |zip|   #'zipfile.zip' 

zip.file.open('file1', 'w') { |f| f << 'This is file 1.' }   

zip.dir.mkdir('sub_dir')   

zip.file.open('sub_dir/file2', 'w') { |f| f << 'This is file 2.' }   

end 

40.ZIP解压缩 

41.获得应用程序完整路径 

42.ZIP压缩文件夹 

#require 'rubygems'  

#require 'zip/zipfilesystem' 

def compress   

  Zip::ZipFile.open 'zipfile.zip', Zip::ZipFile::CREATE do |zip|   

    add_file_to_zip('dir', zip)   

  end  

end  

  

def add_file_to_zip(file_path, zip)   

  if File.directory?(file_path)   

    Dir.foreach(file_path) do |sub_file_name|   

      add_file_to_zip("#{file_path}/#{sub_file_name}", zip) unless sub_file_name == '.' or sub_file_name == '..'  

    end  

  else  

    zip.add(file_path, file_path)   

  end  

end  

add_file_to_zip %%1,%%2 

43.递归删除目录下的文件 

#require 'ftools' 

file_path = String.new 

file_path="D:" 

    if File.directory? file_path 

      Dir.foreach(file_path) do |file| 

        if file!="." and file!=".." 

puts "File:"+file 

        end 

      end 

    end 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: