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类。
import java.awt.Desktop;import java.io.File;import java.io.IOException;import java.net.URI;import java.net.URISyntaxException;/*** @author ckc* 照着api来 可以用默认浏览器打开uri 默认的邮件打开发送到uri* 默认程序打开 编辑文件*/public class TestDesktop {public static void main(String[] args) {//Desktop对象的创建是通过getDesktop获取实例的Desktop dt = Desktop.getDesktop();//判断Desktop类是否支持当前平台if(dt.isDesktopSupported()){System.out.println('your platform supproted desktop class!');}//Desktop.Action是枚举类型 有browse edit open mail print这些系统操作//下面方法可以判断是否支持该操作System.out.println(dt.isSupported(Desktop.Action.MAIL));System.out.println(dt.isSupported(Desktop.Action.EDIT));System.out.println(dt.isSupported(Desktop.Action.OPEN));System.out.println(dt.isSupported(Desktop.Action.BROWSE));System.out.println(dt.isSupported(Desktop.Action.PRINT));//默认用了记事本File text = new File('e:/test.txt');try {dt.edit(text);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}//jsp默认用了Sublime Text2 确实用该编辑器打开了File jsp = new File('e:/test.jsp');try {dt.open(jsp);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}//打印的发生了IO异常 连到系统上的设备没有发挥作用 应该是电脑没有打印机的关系try {dt.print(jsp);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}//使用了默认的浏览器打开URI uri;try {uri = new URI('www.csdn.net');dt.browse(uri);} catch (URISyntaxException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}
写完这个之后,进行代码的修改,只针对浏览器批量打开URI。
import java.awt.Desktop;import java.io.IOException;import java.net.URI;import java.net.URISyntaxException;public class Main {public static void test(String uristring) {try {URI uri = new URI(uristring);Desktop dp = Desktop.getDesktop();if (dp.isSupported(Desktop.Action.BROWSE)) {dp.browse(uri);}} catch (IOException e) {System.out.println('Browser open URI fail');} catch (URISyntaxException e) {System.out.println('URI is illegal');}}}
因为针对的是众多多变的URI,所以不能在程序中写死为字符串数组,最好的方法还是用图形界面,直接拿之前写过的Swing工具修改即可。
import java.awt.BorderLayout;import java.awt.Container;import java.awt.Dimension;import java.awt.FlowLayout;import java.awt.GridLayout;import java.awt.Point;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.BufferedReader;import java.io.File;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import java.util.ArrayList;import java.util.List;import javax.swing.Box;import javax.swing.BoxLayout;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JTextField;import javax.swing.event.DocumentEvent;import javax.swing.event.DocumentListener;/*** @author ckc 2015-4-10 14:39:13* 当前版本是针对最新的http://download.123cw.cn/AppDownload/* App/SingleGame/mm/bydr401.apk 输入 一组url之后 让系统默认的浏览器 火狐将他们逐一打开* desktop这个类还是蛮好用的***/public class TestSingleGame {// 两个监听器需要用到的变量—— 两个文本域 一个输入一个输出 将其放到全局变量中static JTextArea text = new JTextArea(25, 40);static JScrollPane outjsp = new JScrollPane();public static void main(String[] args) {JFrame frame = new JFrame('OpenURLInExplorer');// 行数,列数BorderLayout layout = new BorderLayout();// 窗体大小,窗体位置frame.setSize(600, 500);frame.setLocation(400, 200);Container container = frame.getContentPane();container.setLayout(layout);JTextField field = new JTextField('url地址:请将地址复制于此并按start运行');field.setEditable(false);// int rows int columns// JTextArea text = new JTextArea(15,80);// text.setLineWrap(true); 没有滚动条的时候 true为超出文本框部分也计入//// 滚动条的添加JScrollPane jsp = new JScrollPane(text);// int rows int columnsBox box = Box.createVerticalBox();JPanel p = new JPanel();BoxLayout blayout = new BoxLayout(p, BoxLayout.Y_AXIS);p.setLayout(blayout);p.add(field);p.add(jsp);// frame.setContentPane(p);// frame.setLayout(layout);JPanel p2 = new JPanel();BoxLayout blayout2 = new BoxLayout(p2, BoxLayout.Y_AXIS);p2.setLayout(blayout2);p2.add(outjsp);JButton b = new JButton('start to open every uri at your default browser');b.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {// /n为换行符 空字符串直接跳过String[] array = text.getText().split('\n');for (int i = 0; i < array.length; i++) {Main.test(array[i]);}}});container.add(p, 'North');container.add(b, 'Center');// frame.pack();frame.setResizable(false);frame.setVisible(true);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}
最后的结果:

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

