将默认浏览器作为字符串返回的方法?

2022-09-02 21:40:19

是否有一种方法将用户的默认浏览器作为字符串返回?

我正在寻找的示例:

System.out.println(getDefaultBrowser()); // prints "Chrome"

答案 1

您可以通过使用注册表[1]和正则表达式将默认浏览器提取为字符串来完成此方法。据我所知,没有一种“更干净”的方式可以做到这一点。

public static String getDefaultBrowser()
{
    try
    {
        // Get registry where we find the default browser
        Process process = Runtime.getRuntime().exec("REG QUERY HKEY_CLASSES_ROOT\\http\\shell\\open\\command");
        Scanner kb = new Scanner(process.getInputStream());
        while (kb.hasNextLine())
        {
            // Get output from the terminal, and replace all '\' with '/' (makes regex a bit more manageable)
            String registry = (kb.nextLine()).replaceAll("\\\\", "/").trim();

            // Extract the default browser
            Matcher matcher = Pattern.compile("/(?=[^/]*$)(.+?)[.]").matcher(registry);
            if (matcher.find())
            {
                // Scanner is no longer needed if match is found, so close it
                kb.close();
                String defaultBrowser = matcher.group(1);

                // Capitalize first letter and return String
                defaultBrowser = defaultBrowser.substring(0, 1).toUpperCase() + defaultBrowser.substring(1, defaultBrowser.length());
                return defaultBrowser;
            }
        }
        // Match wasn't found, still need to close Scanner
        kb.close();
    } catch (Exception e)
    {
        e.printStackTrace();
    }
    // Have to return something if everything fails
    return "Error: Unable to get default browser";
}

现在,无论何时调用,都应返回 Windows 的默认浏览器。getDefaultBrowser()

经测试的浏览器:

  • 谷歌浏览器(功能返回“Chrome”)
  • Mozilla Firefox (函数返回 “Firefox”)
  • Opera(函数返回“Opera”)

正则表达式 () 的说明:/(?=[^/]*$)(.+?)[.]

  • /(?=[^/]*$)匹配字符串中最后一次出现的情况/
  • [.]与 文件扩展名中的 匹配.
  • (.+?)捕获这两个匹配字符之间的字符串。

您可以通过查看在针对正则表达式进行测试之前的值来了解如何捕获它(我已经加粗了正在捕获的内容):registry

(默认值)REG_SZ “C:/Program Files (x86)/Mozilla Firefox/firefox.exe” -osint -url “%1”


[1] 仅限视窗。我无法访问Mac或Linux计算机,但是从互联网上环顾四周,我认为将默认浏览器值存储在Mac上,而在Linux上,我认为您可以执行命令以获取默认浏览器。不过,我可能错了,也许可以访问这些内容的人愿意为我进行测试并评论如何实现它们?com.apple.LaunchServices.plistxdg-settings get default-web-browser


答案 2