ユーザーの既定のブラウザを文字列として返すメソッドはありますか?
私が探しているものの例:
System.out.println(getDefaultBrowser()); // prints "Chrome"
この方法は、レジストリ[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";
}
が呼び出されるたびgetDefaultBrowser()
に、Windows の既定のブラウザーが返されるようになりました。
テスト済みブラウザ:
正規表現の説明 ( /(?=[^/]*$)(.+?)[.]
):
/(?=[^/]*$)
/
文字列の最後に出現するものに一致[.]
.
ファイル拡張子の(.+?)
これらの 2 つの一致した文字の間の文字列をキャプチャします。registry
正規表現に対してテストする前に rightの値を見ると、これがどのようにキャプチャされるかがわかります (キャプチャされているものを太字にしています)。
(デフォルト) REG_SZ "C:/Program Files (x86)/Mozilla Firefox/ firefox .exe" -osint -url "%1"
[1] Windows のみ。私は Mac または Linux コンピューターにアクセスできませんが、インターネットを見回すとcom.apple.LaunchServices.plist
、Mac に既定のブラウザーの値が保存されていると思います。Linux では、コマンドxdg-settings get default-web-browser
を実行して既定のブラウザーを取得できると思います。私はそれについて間違っているかもしれませんが、それらにアクセスできる誰かが私のためにテストして、それらを実装する方法についてコメントしてくれるでしょうか?