【问题标题】:Get list of subfolders from a given folder in JRuby从 JRuby 中的给定文件夹中获取子文件夹列表
【发布时间】:2019-05-18 21:25:58
【问题描述】:

我在SikuliX IDE 中使用JRuby 以递归方式获取文件夹及其子文件夹的列表,并将其绝对路径(也可能包含虚线字符)存储在一个数组中。我尝试使用以下代码:

records = Dir.glob 'C:/_private/Files/**/*/'

我收到错误消息:

[错误] SyntaxError (无效的多字节字符 (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

【问题讨论】:

  • 看看这个网址可能对你有帮助 stackoverflow.com/questions/17859530/… 。也让我
  • @Kandy :问题出在绝对路径中,但不确定,我应该如何逃避它。
  • 您在哪个操作系统上工作
  • @Kandy :我在 Windows 上使用它。
  • 我认为您只是在寻找文件夹,所以我在检查下方发布了答案

标签: ruby jruby sikuli sikuli-ide


【解决方案1】:

请检查它产生预期结果的新东西 -

 records = Dir.glob('/E:/ISSUE_Folder/**/*.*')

 records.each do |item|
   puts File.dirname(item)
 end

如您所见,它会进入每个文件夹和子文件夹

【讨论】:

  • 它不起作用,如果路径中有虚线字符,首先我只需要子目录的完整路径。
  • 虚线表示您可以发送您的路径
  • 我无法找到您。只需在您的问题中编辑更多代码,以便我可以在我身边重现您的错误。
  • 我编辑了问题。您的输出的问题是,只需要子文件夹,不需要文件,但它应该递归工作以获取所有子文件夹。
  • @plaidshirt 我已经编辑了我的答案,希望它符合您的要求。
【解决方案2】:

我的 rails 应用程序有 config 文件夹,并且它有许多文件和子文件夹,所以只获取 config 中的文件夹,

我使用了ap下面由awesome_printgem提供的

> 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"]

您可以通过添加第一个和第二个层次结构(在上面注释)子文件夹来进一步获得结果

【讨论】:

  • 谢谢,但是如何在 Windows 中使用绝对路径? C:/ 表示法似乎无效。
  • @plaidshirt 我在windows中检查过,检查它是否有效。
【解决方案3】:

也许您的 JRuby 使用的版本低于或等于 ruby​​ 1.9

在 Ruby 1.9 中,文件中的标头需要指明编码格式。

在顶部添加这一行

# encoding: UTF-8

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多