使用包含小数的数字通配符检查文件夹是否存在

Check if folder exists using a numeric wildcard including decimals

我正在尝试编写代码来检查 Acrobat xx.x 文件夹是否存在于用户的 PC 上,其中 xx.x 代表潜在的 Acrobat 版本号,例如 Acrobat 10.0 或 Acrobat 11.1 . 意思是我不知道 xx.x 会是什么 。找到的答案 here 似乎假设我知道通配符的值,但我不知道。

目的是最终将.js文件写入目录...\Program Files\Adobe\Acrobat xx.x\Acrobat\Javascripts

到目前为止,我确定是否安装了 32/64 位 OS,并将 Program Files 路径设置为 progFiles。假设安装了 Adob​​e,那么我需要使用这个路径来确定 Acrobat xx.x 是否是一个子文件夹,例如:

folderToFind = new File(progFiles + "\Adobe\"+"\Acrobat 11.1");

其中 11.1 可以是 0.1 到 99.9 之间的任何数字。然后我可以通过以下方式识别它的存在:

if (folderToFind.exists())
  {
    System.out.println("Acrobat folder found");
  }

一个明显的方法是创建一个循环,检查是否存在每一种可能性。这似乎是多余和不必要的。我希望有更有效的方法,例如:

  if (progFiles + "\Adobe\"+"\Acrobat **.*\Acrobat\Javascripts".exists()){
 // ...
     }

有什么想法吗?谢谢

您使用 FileFilter

然后寻找符合您描述的文件: 杂技演员\d{1,2}\.\d

示例:

    File dir = new File(path);
    File[] matchingFiles = dir.listFiles(new FileFilter() {
        @Override
        public boolean accept(File pathname) {
            String regex = "Acrobat \d{1,2}\.\d";
            Pattern p = Pattern.compile(regex);
            Matcher m = p.matcher(pathname.getName());
            return m.matches();
        }
    });
    for(File f : matchingFiles) {
        System.out.println(f.getName());
    }

您可以完全控制如何构建您的模式