从 JRuby 中的给定文件夹获取子文件夹列表
Get list of subfolders from a given folder in JRuby
我在 SikuliX IDE
中使用 JRuby
以递归方式获取文件夹及其子文件夹的列表,并将其绝对路径(可能还包含点字符)存储在一个数组中。我尝试使用以下代码:
records = Dir.glob 'C:/_private/Files/**/*/'
我收到错误消息:
[error] SyntaxError ( invalid multibyte char (UTF-8) )
预期输出:
C:/_private/Files/dir1
C:/_private/Files/dir1/subdir1
C:/_private/Files/dir1/subdir2
C:/_private/Files/dir2
C:/_private/Files/dir2/subdir1
C:/_private/Files/dir2/subdir2
请检查产生预期结果的新内容 -
records = Dir.glob('/E:/ISSUE_Folder/**/*.*')
records.each do |item|
puts File.dirname(item)
end
如您所见,它会转到每个文件夹和子文件夹
我的 rails 应用程序有 config
个文件夹并且它有许多文件和子文件夹,因此只获取 config
、
中的文件夹
我使用了下面由 awesome_print gem
提供的 ap
> ap Dir.glob "#{Rails.root}/config/**/"
[
[0] "/home/ray/projects/example_app/config/",
[1] "/home/ray/projects/example_app/config/initializers/",
[2] "/home/ray/projects/example_app/config/locales/",
[3] "/home/ray/projects/example_app/config/environments/"
]
我在config/locales/
里面有test
个文件夹,也是通过下面的查询得到的
> ap Dir.glob "#{Rails.root}/config/**/**/"
[
[0] "/home/ray/projects/example_app/config/",
[1] "/home/ray/projects/example_app/config/initializers/",
[2] "/home/ray/projects/example_app/config/locales/",
[3] "/home/ray/projects/example_app/config/locales/test/",
[4] "/home/ray/projects/example_app/config/environments/"
]
要进一步搜索第三层级的子文件夹,我将使用 "#{Rails.root}/config/**/**/**/"
更新:
您可以尝试以下 windows,
irb(main):022:0> Dir.glob("D:/sd/*/") # first hierarchy
=> ["D:/sd/df/", "D:/sd/dff/"]
irb(main):023:0> Dir.glob("D:/sd/*")
=> ["D:/sd/351px-Nvidia_logo.png", "D:/sd/df", "D:/sd/dff"]
irb(main):024:0> Dir.glob("D:/sd/*/*/") # second hierarchy
=> ["D:/sd/dff/ty/"]
irb(main):025:0> Dir.glob("D:/sd/*/*")
=> ["D:/sd/df/351px-Nvidia_logo2.png", "D:/sd/dff/ty"]
您可以通过添加第一层级和第二层级(上面已注释)子文件夹来进一步获得结果
也许您的 JRuby 使用小于或等于 ruby 1.9
在Ruby1.9中,您的文件头需要指明编码格式。
在顶部添加此行
# encoding: UTF-8
我在 SikuliX IDE
中使用 JRuby
以递归方式获取文件夹及其子文件夹的列表,并将其绝对路径(可能还包含点字符)存储在一个数组中。我尝试使用以下代码:
records = Dir.glob 'C:/_private/Files/**/*/'
我收到错误消息:
[error] SyntaxError ( invalid multibyte char (UTF-8) )
预期输出:
C:/_private/Files/dir1
C:/_private/Files/dir1/subdir1
C:/_private/Files/dir1/subdir2
C:/_private/Files/dir2
C:/_private/Files/dir2/subdir1
C:/_private/Files/dir2/subdir2
请检查产生预期结果的新内容 -
records = Dir.glob('/E:/ISSUE_Folder/**/*.*')
records.each do |item|
puts File.dirname(item)
end
如您所见,它会转到每个文件夹和子文件夹
我的 rails 应用程序有 config
个文件夹并且它有许多文件和子文件夹,因此只获取 config
、
我使用了下面由 awesome_print gem
提供的ap
> ap Dir.glob "#{Rails.root}/config/**/"
[
[0] "/home/ray/projects/example_app/config/",
[1] "/home/ray/projects/example_app/config/initializers/",
[2] "/home/ray/projects/example_app/config/locales/",
[3] "/home/ray/projects/example_app/config/environments/"
]
我在config/locales/
里面有test
个文件夹,也是通过下面的查询得到的
> ap Dir.glob "#{Rails.root}/config/**/**/"
[
[0] "/home/ray/projects/example_app/config/",
[1] "/home/ray/projects/example_app/config/initializers/",
[2] "/home/ray/projects/example_app/config/locales/",
[3] "/home/ray/projects/example_app/config/locales/test/",
[4] "/home/ray/projects/example_app/config/environments/"
]
要进一步搜索第三层级的子文件夹,我将使用 "#{Rails.root}/config/**/**/**/"
更新:
您可以尝试以下 windows,
irb(main):022:0> Dir.glob("D:/sd/*/") # first hierarchy
=> ["D:/sd/df/", "D:/sd/dff/"]
irb(main):023:0> Dir.glob("D:/sd/*")
=> ["D:/sd/351px-Nvidia_logo.png", "D:/sd/df", "D:/sd/dff"]
irb(main):024:0> Dir.glob("D:/sd/*/*/") # second hierarchy
=> ["D:/sd/dff/ty/"]
irb(main):025:0> Dir.glob("D:/sd/*/*")
=> ["D:/sd/df/351px-Nvidia_logo2.png", "D:/sd/dff/ty"]
您可以通过添加第一层级和第二层级(上面已注释)子文件夹来进一步获得结果
也许您的 JRuby 使用小于或等于 ruby 1.9
在Ruby1.9中,您的文件头需要指明编码格式。
在顶部添加此行
# encoding: UTF-8