有多个网页网址,我需要查看网页是否正常,近来的我发现很蛋疼,我要一个一个地复制网址,放进地址栏里面,这个一旦网址多个,真心蛋疼,一开始不知道怎么入手,参考了http://www.jb51.net/article/42460.htm这篇文章,然后自己重新去看了API。
第一种方法是之前写定时器工具用到的东西。
Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler ");
用的是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 block
e.printStackTrace();
}
//jsp默认用了Sublime Text2 确实用该编辑器打开了
File jsp = new File("e:/test.jsp");
try {
dt.open(jsp);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//打印的发生了IO异常 连到系统上的设备没有发挥作用 应该是电脑没有打印机的关系
try {
dt.print(jsp);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//使用了默认的浏览器打开
URI uri;
try {
} 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 columns
Box 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);
}
}
最后的结果:
将网址全部录入文本框中,按执行后便会在默认的浏览器中打开。