admin 管理员组

文章数量: 1184232

window

Runtime rt = Runtime.getRuntime();
String url = "http://stackoverflow";
rt.exec("rundll32 url.dll,FileProtocolHandler " + url);

Mac

Runtime rt = Runtime.getRuntime();
String url = "http://stackoverflow";
rt.exec("open " + url);

Linux

Runtime rt = Runtime.getRuntime();
String url = "http://stackoverflow";
String[] browsers = { "google-chrome", "firefox", "mozilla", "epiphany", "konqueror",
                                 "netscape", "opera", "links", "lynx" };
 
StringBuffer cmd = new StringBuffer();
for (int i = 0; i < browsers.length; i++)
    if(i == 0)
        cmd.append(String.format(    "%s \"%s\"", browsers[i], url));
    else
        cmd.append(String.format(" || %s \"%s\"", browsers[i], url)); 
    // If the first didn't work, try the next browser and so on

rt.exec(new String[] { "sh", "-c", cmd.toString() });

环境判断

String os = System.getProperty("os.name").toLowerCase();
Windows:

os.indexOf("win") >= 0
Mac:

os.indexOf("mac") >= 0
Linux:

os.indexOf("nix") >=0 || os.indexOf("nux") >=0

说明

Linux的不足之处

上述方案中,Linux中的列出所有的浏览器,是非常不好的解决方案。

可以考虑在Linux中安装xdg-open,接着就可以像mac那样来使用啦。

window方案的原理

1.利用java运行时环境和windows系统应用程序
首先我们都知道,在Windows中浏览器可以用来打开很多不同的文件,比如网页,txt和pdf等等(前提是你的系统注册了相关软件)。
那么IE是通过什么方式来实现不同文件用不同软件来打开呢?

其实它有一个叫url.dll 的动态链接库,url.dll提供了IE调用 各种应用来打开不同文件的实现。既然IE提供了这样一个功能,我们就可以在java程序中利用它。

那么,我们如何在java程序中调用动态链接库呢? 我们知道,windows系统提供了一个叫Rundll32.exe的文件,它的作用是执行DLL文件中的内部函数,这样在进程当中,只会有rundll32.exe,而不会有DLL后门的进程,这样,就实现了进程上的隐藏

rundll32.exe的具体使用方法如下

Rundll32.exe [DLLname],[Functionname]

说明:

  1. DLLname为需要执行的DLL文件名;
  2. Functionname为前边需要执行的DLL文件的具体引出函数;
  3. [Arguments]为引出函数的具体参数。

结合url.dllrundll32.exe,我们就可以通过在命令行中启动相应程序打开相应文档: 假设我有一个pdf文档,存放在c: est.pdf 。打开命令行, 运行如下 命令:

rundll32 url.dll FileProtocolHandler file://c: est.pdf

参考地址:

How to open the default webbrowser using java

https://blog.csdn/u014214965/article/details/84764018

本文标签: 如何用 浏览器 java