Java中Desktop类和批量在浏览器打开URI

有多个网页网址,我需要查看网页是否正常,近来的我发现很蛋疼,我要一个一个地复制网址,放进地址栏里面,这个一旦网址多个,真心蛋疼,一开始不知道怎么入手,参考了http://www.jb51.net/article/42460.htm这篇文章,然后自己重新去看了API。

第一种方法是之前写定时器工具用到的东西。

Runtime.getRuntime().exec('rundll32 url.dll,FileProtocolHandler http://www.csdn.net');

用的是windows指令的操作,Runtime执行的方法相当于你在dos窗口执行。但是像这样rundll32 url.dll的指令还真不知道。

第二种方法是使用Java提供的Desktop类。

  1. import java.awt.Desktop;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import java.net.URI;
  5. import java.net.URISyntaxException;
  6. /**
  7. * @author ckc
  8. * 照着api来 可以用默认浏览器打开uri 默认的邮件打开发送到uri
  9. * 默认程序打开 编辑文件
  10. */
  11. public class TestDesktop {
  12. public static void main(String[] args) {
  13. //Desktop对象的创建是通过getDesktop获取实例的
  14. Desktop dt = Desktop.getDesktop();
  15. //判断Desktop类是否支持当前平台
  16. if(dt.isDesktopSupported()){
  17. System.out.println('your platform supproted desktop class!');
  18. }
  19. //Desktop.Action是枚举类型 有browse edit open mail print这些系统操作
  20. //下面方法可以判断是否支持该操作
  21. System.out.println(dt.isSupported(Desktop.Action.MAIL));
  22. System.out.println(dt.isSupported(Desktop.Action.EDIT));
  23. System.out.println(dt.isSupported(Desktop.Action.OPEN));
  24. System.out.println(dt.isSupported(Desktop.Action.BROWSE));
  25. System.out.println(dt.isSupported(Desktop.Action.PRINT));
  26. //默认用了记事本
  27. File text = new File('e:/test.txt');
  28. try {
  29. dt.edit(text);
  30. } catch (IOException e) {
  31. // TODO Auto-generated catch block
  32. e.printStackTrace();
  33. }
  34. //jsp默认用了Sublime Text2 确实用该编辑器打开了
  35. File jsp = new File('e:/test.jsp');
  36. try {
  37. dt.open(jsp);
  38. } catch (IOException e) {
  39. // TODO Auto-generated catch block
  40. e.printStackTrace();
  41. }
  42. //打印的发生了IO异常 连到系统上的设备没有发挥作用 应该是电脑没有打印机的关系
  43. try {
  44. dt.print(jsp);
  45. } catch (IOException e) {
  46. // TODO Auto-generated catch block
  47. e.printStackTrace();
  48. }
  49. //使用了默认的浏览器打开
  50. URI uri;
  51. try {
  52. uri = new URI('www.csdn.net');
  53. dt.browse(uri);
  54. } catch (URISyntaxException e) {
  55. e.printStackTrace();
  56. } catch (IOException e) {
  57. e.printStackTrace();
  58. }
  59. }
  60. }


写完这个之后,进行代码的修改,只针对浏览器批量打开URI。

  1. import java.awt.Desktop;
  2. import java.io.IOException;
  3. import java.net.URI;
  4. import java.net.URISyntaxException;
  5. public class Main {
  6. public static void test(String uristring) {
  7. try {
  8. URI uri = new URI(uristring);
  9. Desktop dp = Desktop.getDesktop();
  10. if (dp.isSupported(Desktop.Action.BROWSE)) {
  11. dp.browse(uri);
  12. }
  13. } catch (IOException e) {
  14. System.out.println('Browser open URI fail');
  15. } catch (URISyntaxException e) {
  16. System.out.println('URI is illegal');
  17. }
  18. }
  19. }

因为针对的是众多多变的URI,所以不能在程序中写死为字符串数组,最好的方法还是用图形界面,直接拿之前写过的Swing工具修改即可。

  1. import java.awt.BorderLayout;
  2. import java.awt.Container;
  3. import java.awt.Dimension;
  4. import java.awt.FlowLayout;
  5. import java.awt.GridLayout;
  6. import java.awt.Point;
  7. import java.awt.event.ActionEvent;
  8. import java.awt.event.ActionListener;
  9. import java.io.BufferedReader;
  10. import java.io.File;
  11. import java.io.FileNotFoundException;
  12. import java.io.FileReader;
  13. import java.io.IOException;
  14. import java.util.ArrayList;
  15. import java.util.List;
  16. import javax.swing.Box;
  17. import javax.swing.BoxLayout;
  18. import javax.swing.JButton;
  19. import javax.swing.JFrame;
  20. import javax.swing.JLabel;
  21. import javax.swing.JPanel;
  22. import javax.swing.JScrollPane;
  23. import javax.swing.JTextArea;
  24. import javax.swing.JTextField;
  25. import javax.swing.event.DocumentEvent;
  26. import javax.swing.event.DocumentListener;
  27. /**
  28. * @author ckc 2015-4-10 14:39:13
  29. * 当前版本是针对最新的http://download.123cw.cn/AppDownload/
  30. * App/SingleGame/mm/bydr401.apk 输入 一组url之后 让系统默认的浏览器 火狐将他们逐一打开
  31. * desktop这个类还是蛮好用的
  32. *
  33. *
  34. */
  35. public class TestSingleGame {
  36. // 两个监听器需要用到的变量—— 两个文本域 一个输入一个输出 将其放到全局变量中
  37. static JTextArea text = new JTextArea(25, 40);
  38. static JScrollPane outjsp = new JScrollPane();
  39. public static void main(String[] args) {
  40. JFrame frame = new JFrame('OpenURLInExplorer');
  41. // 行数,列数
  42. BorderLayout layout = new BorderLayout();
  43. // 窗体大小,窗体位置
  44. frame.setSize(600, 500);
  45. frame.setLocation(400, 200);
  46. Container container = frame.getContentPane();
  47. container.setLayout(layout);
  48. JTextField field = new JTextField('url地址:请将地址复制于此并按start运行');
  49. field.setEditable(false);
  50. // int rows int columns
  51. // JTextArea text = new JTextArea(15,80);
  52. // text.setLineWrap(true); 没有滚动条的时候 true为超出文本框部分也计入
  53. //
  54. // 滚动条的添加
  55. JScrollPane jsp = new JScrollPane(text);
  56. // int rows int columns
  57. Box box = Box.createVerticalBox();
  58. JPanel p = new JPanel();
  59. BoxLayout blayout = new BoxLayout(p, BoxLayout.Y_AXIS);
  60. p.setLayout(blayout);
  61. p.add(field);
  62. p.add(jsp);
  63. // frame.setContentPane(p);
  64. // frame.setLayout(layout);
  65. JPanel p2 = new JPanel();
  66. BoxLayout blayout2 = new BoxLayout(p2, BoxLayout.Y_AXIS);
  67. p2.setLayout(blayout2);
  68. p2.add(outjsp);
  69. JButton b = new JButton(
  70. 'start to open every uri at your default browser');
  71. b.addActionListener(new ActionListener() {
  72. public void actionPerformed(ActionEvent e) {
  73. // /n为换行符 空字符串直接跳过
  74. String[] array = text.getText().split('\n');
  75. for (int i = 0; i < array.length; i++) {
  76. Main.test(array[i]);
  77. }
  78. }
  79. });
  80. container.add(p, 'North');
  81. container.add(b, 'Center');
  82. // frame.pack();
  83. frame.setResizable(false);
  84. frame.setVisible(true);
  85. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  86. }
  87. }


最后的结果:

                                  

将网址全部录入文本框中,按执行后便会在默认的浏览器中打开。

(0)

相关推荐