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 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 {
			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 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);
	}
}

最后的结果:

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

时间: 2024-10-11 18:07:55

Java中Desktop类和批量在浏览器打开URI的相关文章

hadoop中Text类 与 java中String类的区别

hadoop 中 的Text类与java中的String类感觉上用法是相似的,但两者在编码格式和访问方式上还是有些差别的,要说明这个问题,首先得了解几个概念: 字符集: 是一个系统支持的所有抽象字符的集合.字符是各种文字和符号的总称,包括各国家文字.标点符号.图形符号.数字等.例如 unicode就是一个字符集,它的目标是涵盖世界上所有国家的文字和符号: 字符编码:是一套法则,使用该法则能够对自然语言的字符的一个集合(如字母表或音节表),与其他东西的一个集合(如号码或电脉冲)进行配对.即在符号集

Java中String类学习总结

java中String类的使用频率非常高,本人在学习此模块时,认为下列几点知识值得注意: 一.String是不可变对象 java.lang.String类使用了final修饰,不能被继承.Java程序中的所有字面值,即双引号括起的字符串,如"abc",都是作为String类的实例实现的.String是常量,其对象一旦构造就不能再被改变.换句话说,String对象是不可变的,每一个看起来会修改String值的方法,实际上都是创造了一个全新的String对象,以包含修改后的字符串内容.而最

【转载】Java中String类的方法及说明

转载自:http://www.cnblogs.com/YSO1983/archive/2009/12/07/1618564.html String : 字符串类型 一.构造函数     String(byte[ ] bytes):通过byte数组构造字符串对象.     String(char[ ] value):通过char数组构造字符串对象.     String(Sting original):构造一个original的副本.即:拷贝一个original.     String(Strin

java中Color类的简单总结

java中Color类的简单总结 1.颜色的常识 任何颜色都是由三原色组成(RGB),JAVA中支持224为彩色,即红绿蓝分量取值 介于0-255之间(8位表示) 2.Color类中的常量 public final static Color black = new Color(0,0,0); public final static Color bule = new Color(0,0,255); . . 有很多这样的常量,可供我们直接类名去调用而不需要去实例化. 3.Color中的构造函数 pu

Java中Arrays类的两个方法:deepEquals和equals

deepEquals和equals是Java中Arrays类的两个静态方法,可是它们之间有什么样的区别呢? 代码一. import java.util.Arrays; public class Test { public static void main(String[] args) { String[][] name1 = {{ "G","a","o" },{ "H","u","a",

Java中Properties类

Java中Properties类简介 知识学而不用,就等于没用,到真正用到的时候还得重新再学. Properties类继承自Hashtable,如下: 它主要用于读取Java的配置文件,由于配置文件中的很多变量时经常改变的,通过这个类可以让用户脱离程序本身去修改相关的变量配置.在Java中,其配置文件常为.properties文件,格式为文本文件,内容的格式为“键=值”的格式,#打头的是注释行,Properties会忽略注释.允许只有key没有value,没有value时,value会被set成

Java中Integer类的方法

字段摘要 static int MAX_VALUE              保持 int 类型的最大值的常量可取的值为 231-1. static int MIN_VALUE              保持 int 类型的最小值的常量可取的值为 -231. static int SIZE              以二进制补码形式表示 int 值的位数. static Class<Integer> TYPE              表示基本类型 int 的 Class 实例. 构造方法摘要

java中String类小结

构建一个字符串 1.用字符串直接量: String message = new String("Welcome to java"); 2.用字符串直接量: String message = "Welcome to java"; 3.用字符数组 Char[] charArray = {'m', 'y'}; String message = new String(charArray); 不可变字符与限定字符串 String对象是不可变的,内容不能改变 java虚拟机为了

Java中的类装载和初始化模块

在Java中,初始化模块是指用一对"{}"括起来的代码,可以与构造方法一起来对对象进行初始化.初始化模块又分为实例初始化模块和静态初始化模块(只能由类的静态成员引用,在类装载时进行调用) Java中,代码的执行顺序是: 1.装入类     1.1递归装入父类,直到继承链上的父类全部装入为止.     1.2类装入内存之后,静态数据域和静态初始块按照在类中出现的顺序进行执行. 2.调用类的构造方法     2.1递归调用父类的构造方法,直到父类为java.lang.Object为止.