使用 Java 在窗口中查找文件路径



有没有办法在窗口中找到特定的文件路径。例如,假设我想在本地查找putty.exe的位置,有什么方法可以获取完整的文件路径吗?我使用实用程序尝试了以下代码apache commons-io但这需要很多时间,因为本地有很多文件。

File dir = new File("C:\");
String[] extensions = new String[]{"exe"};
IOFileFilter filter = new SuffixFileFilter(extensions, IOCase.INSENSITIVE);
List<File> fileList = (List<File>) FileUtils.listFiles(dir, filter, DirectoryFileFilter.DIRECTORY);
System.out.println("file list size "+fileList.size());
for (File file : fileList) {
    if (file.getName().toLowerCase().contains("putty")) {
        System.out.println(file.getPath());
    }
}

还有没有其他更快的方法?

编辑我想特别找到putty.exe

没有任何程序会扫描整个磁盘以查找所需的文件。

程序使用以下技术之一:

  1. 查找可执行文件时,请查看 PATH 环境变量中的目录
  2. 要求用户在安装时提供文件的位置,并将其存储在已知位置。这可以是存储在程序主目录中的.ini文件;在 Windows 上:系统注册表或用户或系统环境变量(最终也会出现在注册表中)。
  3. 安装程序创建一个启动器 shell 脚本,该脚本设置由程序读取的应用程序特定环境变量。

可能还有其他几个我没有想到的。 这个想法是限制程序必须搜索的位置。

当他们以常规方式安装可执行文件时,它位于 PATH 变量上。

public static Optional<Path> exePath(String exeName) {
    String pathVar = System.getenv("PATH");
    Pattern varPattern = Pattern.compile("%(\w+)%");
    boolean tryVars = true;
    while (tryVars) {
        tryVars = false;
        Matcher m = varPattern.matcher(pathVar);
        StringBuffer sb = new StringBuffer();
        while (m.find()) {
            tryVars = true;
            m.appendReplacement(sb, System.getenv(m.group(1)));
        }
        m.appendTail(sb);
        pathVar = sb.toString();
    }
    String[] dirs = pathVar.split("\s*;\s*");
    for (String dir : dirs) {
        Path path = Paths.get(dir, exeName);
        if (Files.exists(path)) {
            return Optional.of(path);
        }
    }
    return Optional.empty();
}
System.out.println(exePath("java.exe"));

可能变量模式替换是自动完成的(%JAVA_HOME% 等)

相关内容

  • 没有找到相关文章

最新更新