从 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