﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-希望与大家一起分享Java-文章分类-Java技术</title><link>http://www.blogjava.net/haoqingshi/category/2738.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 08:40:12 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 08:40:12 GMT</pubDate><ttl>60</ttl><item><title>Collections的排序(转贴)</title><link>http://www.blogjava.net/haoqingshi/articles/21937.html</link><dc:creator>Java&amp;Inter</dc:creator><author>Java&amp;Inter</author><pubDate>Wed, 30 Nov 2005 04:00:00 GMT</pubDate><guid>http://www.blogjava.net/haoqingshi/articles/21937.html</guid><wfw:comment>http://www.blogjava.net/haoqingshi/comments/21937.html</wfw:comment><comments>http://www.blogjava.net/haoqingshi/articles/21937.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/haoqingshi/comments/commentRss/21937.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/haoqingshi/services/trackbacks/21937.html</trackback:ping><description><![CDATA[<H2 class=diaryTitle>Collections 的排序【转】- -</H2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<P><FONT size=2>&nbsp;</FONT>在使用 Java Collections Framework 时，必须知道 <CODE><FONT face=Courier size=1>Collections</FONT></CODE> 类中的变量是哪些。这个类包含大量支持集合操作的静态方法。在这里，我们不会对所有方法进行介绍，因为您可以自己阅读 API，但是我们将介绍两个经常出现在 Java 代码中的方法： 
<UL>
<LI><CODE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><FONT face=Courier size=1>copy()</FONT></CODE> 
<LI><CODE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><FONT face=Courier size=1>sort()</FONT></CODE> </LI></UL>
<P xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">第一个方法允许将一个集合的内容复制到另一个集合，如下所示：</P><PRE><CODE style="FONT-SIZE: 12px; FONT-FAMILY: Courier New, Courier, monospace">
List source = new ArrayList();
source.add("one");
source.add("two");
List target = new ArrayList();
target.add("three");
target.add("four");

Collections.copy(target, source);
System.out.println(target);
</CODE>
</PRE>
<P xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">该代码将 <CODE><FONT face=Courier size=1>source</FONT></CODE> 复制到 <CODE><FONT face=Courier size=1>target</FONT></CODE> 中。目标代码的大小必须与源代码的大小相同，这样，就无法将 <CODE><FONT face=Courier size=1>List</FONT></CODE> 复制到空的 <CODE><FONT face=Courier size=1>List</FONT></CODE> 中。</P>
<P xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><CODE><FONT face=Courier size=1>sort()</FONT></CODE> 方法元素归类成其自然顺序。所有元素都必须实现 <CODE><FONT face=Courier size=1>Comparable</FONT></CODE> 接口，这样，它们就可以<I>相互比较</I>。像 <CODE><FONT face=Courier size=1>String</FONT></CODE> 这样的内置类也已经创建。因此，对于一组字符串而言，可以使用以下代码按照字典顺序的升序顺序对字符串进行排序：</P><PRE><CODE style="FONT-SIZE: 12px; FONT-FAMILY: Courier New, Courier, monospace">
List strings = new ArrayList();
strings.add("one");
strings.add("two");
strings.add("three");
strings.add("four");

Collections.sort(strings);
System.out.println(strings);
 </CODE>
</PRE>
<P xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">您将在控制台中获得 <CODE><FONT face=Courier size=1>[four, one, three, two]</FONT></CODE>。但是现在可以对创建的类进行分类吗？可以对 <CODE><FONT face=Courier size=1>Adult</FONT></CODE> 进行分类。首先要让类进行相互比较：</P><PRE><CODE style="FONT-SIZE: 12px; FONT-FAMILY: Courier New, Courier, monospace">
public class Adult extends Person implements Comparable {
	...
} 
</CODE>
</PRE>
<P xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">然后要重写 <CODE><FONT face=Courier size=1>compareTo()</FONT></CODE> 来比较两个 <CODE><FONT face=Courier size=1>Adult</FONT></CODE> 实例。我们将保持我们的例子在比较方面的简单性，所以该例不会进行太多的比较操作：</P><PRE><CODE style="FONT-SIZE: 12px; FONT-FAMILY: Courier New, Courier, monospace">
public int compareTo(Object other) {
	final int LESS_THAN = -1;
	final int EQUAL = 0;
	final int GREATER_THAN = 1;

	Adult otherAdult = (Adult) other;
	if ( this == otherAdult ) return EQUAL;

	int comparison = this.firstname.compareTo(otherAdult.firstname);
	if (comparison != EQUAL) return comparison;
	
	comparison = this.lastname.compareTo(otherAdult.lastname);
	if (comparison != EQUAL) return comparison;
	
	return EQUAL;
}
</CODE>
</PRE>
<P xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">任何小于 0 的数字都意味着“小于”，但是 -1 是表示这个意思一个很好用的值。与此类似，用 1 表示“大于”也很方便。正如您可以看到的，0 则意味着“等于”。以这种方式比较两个对象显然是一个手动过程。您必须遍历实例变量并比较每个变量。在这种情况下，我们要比较名和姓，并根据姓氏有效地对人们进行排序。但是您应该能够明白为什么我们的例子过于简单。每个 <CODE><FONT face=Courier size=1>Adult</FONT></CODE> 都只有一个名和姓。如果想进行深层的比较，那么必须比较每个 <CODE><FONT face=Courier size=1>Adult</FONT></CODE> 的 <CODE><FONT face=Courier size=1>Wallet</FONT></CODE>，以查看它们是否相等，这可能意味着我们必须在 <CODE><FONT face=Courier size=1>Wallet</FONT></CODE> 和其余对象上实现 <CODE><FONT face=Courier size=1>compareTo()</FONT></CODE>。此外，为了正确进行比较，无论何时重写 <CODE><FONT face=Courier size=1>compareTo()</FONT></CODE>，都必须确保该比较与 <CODE><FONT face=Courier size=1>equals()</FONT></CODE> 是一致的。我们没有实现 <CODE><FONT face=Courier size=1>equals()</FONT></CODE>，所以不用担心要与它一致，但我们可以做到这一点。事实上，在返回 <CODE><FONT face=Courier size=1>EQUAL</FONT></CODE> 之前，我已经看到包含类似以下代码行的代码：</P><PRE><CODE style="FONT-SIZE: 12px; FONT-FAMILY: Courier New, Courier, monospace">
assert this.equals(otherAdult) : "compareTo inconsistent with equals.";
</CODE>
</PRE>
<P xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">比较对象的其他方法是：提取 <CODE><FONT face=Courier size=1>compareTo()</FONT></CODE> 中的算法，将其放入 <CODE><FONT face=Courier size=1>Comparator</FONT></CODE> 类型的对象中，然后对将分类的集合调用 <CODE><FONT face=Courier size=1>Collections.sort()</FONT></CODE> 和 <CODE><FONT face=Courier size=1>Comparator</FONT></CODE>，如下所示：</P><PRE><CODE style="FONT-SIZE: 12px; FONT-FAMILY: Courier New, Courier, monospace">
public class AdultComparator implements Comparator {

	public int compare(Object object1, Object object2) {
		final int LESS_THAN = -1;
		final int EQUAL = 0;
		final int GREATER_THAN = 1;

		if ((object1 == null) ;amp;amp (object2 == null))
			return EQUAL;
		if (object1 == null)
			return LESS_THAN;
		if (object2 == null)
			return GREATER_THAN;

		Adult adult1 = (Adult) object1;
		Adult adult2 = (Adult) object2;
		if (adult1 == adult2)
			return EQUAL;

		int comparison = adult1.firstname.compareTo(adult2.firstname);
		if (comparison != EQUAL)
			return comparison;

		comparison = adult1.lastname.compareTo(adult2.lastname);
		if (comparison != EQUAL)
			return comparison;

		return EQUAL;
	}
}

public class CommunityApplication {

	public static void main(String[] args) {
		Adult adult1 = new Adult();
		adult1.setFirstname("Bob");
		adult1.setLastname("Smith");
		
		Adult adult2 = new Adult();
		adult2.setFirstname("Al");
		adult2.setLastname("Jones");
		
		List adults = new ArrayList();
		adults.add(adult1);
		adults.add(adult2);
		
		Collections.sort(adults, new AdultComparator());
		System.out.println(adults);
	}
} </CODE>
</PRE>
<P xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">在控制台窗口中，应该看到以某种顺序排列的“Al Jones”和“Bob Smith”。</P>
<P xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">使用第二种方法是有一些好的理由的。技术方面的理由已经超出了本文的讨论范围。不过，从好的 OOD 的角度来看，将比较代码隔离到另一个对象中，而不是为每个 <CODE><FONT face=Courier size=1>Adult</FONT></CODE> 提供将自身与其他对象比较的能力是一个好主意。然而，因为这正是 <CODE><FONT face=Courier size=1>equals()</FONT></CODE> 要做的事，所以即使结果是布尔值，对于每种方法而言，那些仍然是一些好参数。</P>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD width="90%"><FONT face="Verdana, Arial, Helvetica" size=4><B>使用集合</B></FONT></TD>
<TD align=right width=200><FONT face="Verdana, Arial, Helvetica" size=1><NOBR></FONT></NOBR></TD></TR></TBODY></TABLE><BR><BR><FONT face="Verdana, Arial, Helvetica" size=2>
<P xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">何时应该使用特殊类型的集合？这是一个由您做出的判断决定，而且，正是因为这类的决定，您希望像一位编程人员那样付出很多。</P>
<P xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">尽管许多专业人士相信，没有太多关于在任一给定情况下使用哪些类的硬性规定。以我的个人经验而论，大多数时间里，我使用集合、<CODE><FONT face=Courier size=1>ArrayList</FONT></CODE> 或 <CODE><FONT face=Courier size=1>HashMap</FONT></CODE>（请记住，<CODE><FONT face=Courier size=1>Map</FONT></CODE> 不是真正的集合）获得了成功。您自己去体验可能也会有同样的效果。以下是一些经验法则，其中的一些显然要好于另外一些：</P>
<UL>
<LI>在认为自己需要一个集合时，从使用 <CODE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><FONT face=Courier size=1>List</FONT></CODE> 开始，然后让代码告诉您是否需要另一种类型的集合。 
<LI>如果需要惟一的一组什么东西，那么请使用 <CODE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><FONT face=Courier size=1>Set</FONT></CODE>。 
<LI>在遍历集合时，如果迭代顺序很重要，则使用可用的 <CODE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><FONT face=Courier size=1>Tree...</FONT></CODE> 风格的集合。 
<LI>避免使用 <CODE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><FONT face=Courier size=1>Vector</FONT></CODE>，除非需要利用其同步功能。 
<LI>直到（除非）性能出现问题，否则不用担心最优化。 </LI></UL>
<P xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">集合是 Java 语言的最强大的一个方面。不要害怕使用集合，但要提防“转向”。例如，以下是一个从 <CODE><FONT face=Courier size=1>Array</FONT></CODE> 转换到 <CODE><FONT face=Courier size=1>ArrayList</FONT></CODE> 的一个便利方法：</P><PRE><CODE style="FONT-SIZE: 12px; FONT-FAMILY: Courier New, Courier, monospace">
Adult adult1 = new Adult();
Adult adult2 = new Adult();
Adult adult3 = new Adult();
		
List immutableList = Arrays.asList(new Object[] { adult1, adult2, adult3 });
theList.add(new Adult());
</CODE>
</PRE>
<P xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><STRONG>这个代码抛出一个 <CODE><FONT face=Courier size=1>UnsupportedOperationException</FONT></CODE>，因为由 <CODE><FONT face=Courier size=1>Arrays.asList()</FONT></CODE> 返回的 <CODE><FONT face=Courier size=1>List</FONT></CODE> 是不可变的。而您又无法将新的元素添加到不可变的 <CODE><FONT face=Courier size=1>List</FONT></CODE> 中，所以必须留心一点。</STRONG></P></FONT><img src ="http://www.blogjava.net/haoqingshi/aggbug/21937.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/haoqingshi/" target="_blank">Java&Inter</a> 2005-11-30 12:00 <a href="http://www.blogjava.net/haoqingshi/articles/21937.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java开发者必去的技术站点</title><link>http://www.blogjava.net/haoqingshi/articles/18692.html</link><dc:creator>Java&amp;Inter</dc:creator><author>Java&amp;Inter</author><pubDate>Tue, 08 Nov 2005 01:52:00 GMT</pubDate><guid>http://www.blogjava.net/haoqingshi/articles/18692.html</guid><wfw:comment>http://www.blogjava.net/haoqingshi/comments/18692.html</wfw:comment><comments>http://www.blogjava.net/haoqingshi/articles/18692.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/haoqingshi/comments/commentRss/18692.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/haoqingshi/services/trackbacks/18692.html</trackback:ping><description><![CDATA[<FONT face=Arial><STRONG>Java开发者必去的英文技术网站(转)<BR></STRONG>[</FONT><A href="http://www.javaalmanac.com/"><FONT face=Arial>http://www.javaalmanac.com</FONT></A><FONT face=Arial>]&nbsp;-&nbsp;Java开发者年鉴一书的在线版本.&nbsp;要想快速查到某种Java技巧的用法及示例代码,&nbsp;这是一个不错的去处.&nbsp;<BR>[</FONT><A href="http://www.onjava.com/"><FONT face=Arial>http://www.onjava.com</FONT></A><FONT face=Arial>]&nbsp;-&nbsp;O'Reilly的Java网站.&nbsp;每周都有新文章.&nbsp;<BR>[</FONT><A href="http://java.sun.com/"><FONT face=Arial>http://java.sun.com</FONT></A><FONT face=Arial>]&nbsp;-&nbsp;官方的Java开发者网站&nbsp;-&nbsp;每周都有新文章发表.&nbsp;<BR>[</FONT><A href="http://www.developer.com/java"><FONT face=Arial>http://www.developer.com/java</FONT></A><FONT face=Arial>]&nbsp;-&nbsp;由Gamelan.com&nbsp;维护的Java技术文章网站.&nbsp;<BR>[</FONT><A href="http://www.java.net/"><FONT face=Arial>http://www.java.net</FONT></A><FONT face=Arial>]&nbsp;-&nbsp;Sun公司维护的一个Java社区网站.&nbsp;<BR>[</FONT><A href="http://www.builder.com/"><FONT face=Arial>http://www.builder.com</FONT></A><FONT face=Arial>]&nbsp;-&nbsp;Cnet的Builder.com网站&nbsp;-&nbsp;所有的技术文章,&nbsp;以Java为主.&nbsp;<BR>[</FONT><A href="http://www.ibm.com/developerworks/java"><FONT face=Arial>http://www.ibm.com/developerworks/java</FONT></A><FONT face=Arial>]&nbsp;-&nbsp;IBM的Developerworks技术网站;&nbsp;这是其中的Java技术主页.&nbsp;<BR>[</FONT><A href="http://www.javaworld.com/"><FONT face=Arial>http://www.javaworld.com</FONT></A><FONT face=Arial>]&nbsp;-&nbsp;最早的一个Java站点.&nbsp;每周更新Java技术文章.&nbsp;<BR>[</FONT><A href="http://www.devx.com/java"><FONT face=Arial>http://www.devx.com/java</FONT></A><FONT face=Arial>]&nbsp;-&nbsp;DevX维护的一个Java技术文章网站.&nbsp;<BR>[</FONT><A href="http://www.fawcette.com/javapro"><FONT face=Arial>http://www.fawcette.com/javapro</FONT></A><FONT face=Arial>]&nbsp;-&nbsp;JavaPro在线杂志网站.&nbsp;<BR>[</FONT><A href="http://www.sys-con.com/java"><FONT face=Arial>http://www.sys-con.com/java</FONT></A><FONT face=Arial>]&nbsp;-&nbsp;Java&nbsp;Developers&nbsp;Journal的在线杂志网站.&nbsp;<BR>[</FONT><A href="http://www.javadesktop.org/"><FONT face=Arial>http://www.javadesktop.org</FONT></A><FONT face=Arial>]&nbsp;-&nbsp;位于Java.net的一个Java桌面技术社区网站.&nbsp;<BR>[</FONT><A href="http://www.theserverside.com/"><FONT face=Arial>http://www.theserverside.com</FONT></A><FONT face=Arial>]&nbsp;-&nbsp;这是一个讨论所有Java服务器端技术的网站.&nbsp;<BR>[</FONT><A href="http://www.jars.com/"><FONT face=Arial>http://www.jars.com</FONT></A><FONT face=Arial>]&nbsp;-&nbsp;提供Java评论服务.&nbsp;包括各种framework和应用程序.&nbsp;<BR>[</FONT><A href="http://www.jguru.com/"><FONT face=Arial>http://www.jguru.com</FONT></A><FONT face=Arial>]&nbsp;-&nbsp;一个非常棒的采用Q&amp;A形式的Java技术资源社区.&nbsp;<BR>[</FONT><A href="http://www.javaranch.com/"><FONT face=Arial>http://www.javaranch.com</FONT></A><FONT face=Arial>]&nbsp;-&nbsp;一个论坛，得到Java问题答案的地方，初学者的好去处。&nbsp;<BR>[</FONT><A href="http://www.ibiblio.org/javafaq/javafaq.html"><FONT face=Arial>http://www.ibiblio.org/javafaq/javafaq.html</FONT></A><FONT face=Arial>]&nbsp;-&nbsp;comp.lang.java的FAQ站点&nbsp;-&nbsp;收集了来自comp.lang.java新闻组的问题和答案的分类目录.&nbsp;<BR>[</FONT><A href="http://java.sun.com/docs/books/tutorial/"><FONT face=Arial>http://java.sun.com/docs/books/tutorial/</FONT></A><FONT face=Arial>]&nbsp;-&nbsp;来自SUN公司的官方Java指南&nbsp;-&nbsp;对于了解几乎所有的java技术特性非常有帮助.&nbsp;<BR>[</FONT><A href="http://www.javablogs.com/"><FONT face=Arial>http://www.javablogs.com</FONT></A><FONT face=Arial>]&nbsp;-&nbsp;互联网上最活跃的一个Java&nbsp;Blog网站.&nbsp;<BR>[</FONT><A href="http://java.about.com/"><FONT face=Arial>http://java.about.com/</FONT></A><FONT face=Arial>]&nbsp;-&nbsp;来自About.com的Java新闻和技术文章网站.</FONT><BR><BR><FONT face=Arial><STRONG>Java开发者必去的中文技术网站(转)<BR></STRONG>1.</FONT><A href="http://www.javaresearch.org/"><FONT face=Arial>http://www.javaresearch.org</FONT></A><BR><FONT face=Arial>2.</FONT><A href="http://www.chinajavaworld.com/"><FONT face=Arial>http://www.chinajavaworld.com</FONT></A><BR><FONT face=Arial>3.</FONT><A href="http://www.javafan.net/"><FONT face=Arial>http://www.javafan.net</FONT></A><BR><FONT face=Arial>4.</FONT><A href="http://www.csdn.net/"><FONT face=Arial>http://www.csdn.net/</FONT></A><FONT face=Arial>&nbsp;or&nbsp;</FONT><A href="http://kb.csdn.net/"><FONT face=Arial>http://kb.csdn.net/</FONT></A><BR><FONT face=Arial>5.</FONT><A href="http://www.cn-java.com/"><FONT face=Arial>http://www.cn-java.com/</FONT></A><BR><FONT face=Arial>6.</FONT><A href="http://www.java-cn.com/index.html"><FONT face=Arial>http://www.java-cn.com/index.html</FONT></A><BR><FONT face=Arial>7.</FONT><A href="http://gceclub.sun.com.cn/"><FONT face=Arial>http://gceclub.sun.com.cn/</FONT></A><BR><FONT face=Arial>8.</FONT><A href="http://www.zahui.com/html/6/"><FONT face=Arial>http://www.zahui.com/html/6/</FONT></A><BR><FONT face=Arial>9.</FONT><A href="http://www.matrix.org.cn/"><FONT face=Arial>http://www.matrix.org.cn/</FONT></A><BR><FONT face=Arial>10.</FONT><A href="http://www.javajia.com/"><FONT face=Arial>http://www.javajia.com/</FONT></A><BR><FONT face=Arial>11.</FONT><A href="http://www.kissjava.com/"><FONT face=Arial>http://www.kissjava.com/</FONT></A><BR><FONT face=Arial>12.</FONT><A href="http://www.huihoo.com/"><FONT face=Arial>http://www.huihoo.com/</FONT></A><BR><BR><img src ="http://www.blogjava.net/haoqingshi/aggbug/18692.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/haoqingshi/" target="_blank">Java&Inter</a> 2005-11-08 09:52 <a href="http://www.blogjava.net/haoqingshi/articles/18692.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于对象数组的问题</title><link>http://www.blogjava.net/haoqingshi/articles/16750.html</link><dc:creator>Java&amp;Inter</dc:creator><author>Java&amp;Inter</author><pubDate>Tue, 25 Oct 2005 06:12:00 GMT</pubDate><guid>http://www.blogjava.net/haoqingshi/articles/16750.html</guid><description><![CDATA[昨天在写一个程序的时候，需要用到对象数组，假设现在有对象 class Test<BR>在使用对于对象数组之前，必须要初始化，因为在未初始化之前，数组中的所有对象都只是一个引用<BR>，在heap中不存在。<BR>    <BR>    Test test[]=new Test[10];<BR>    for( int i=0;i<test.length;i++){<BR>         test[i]=new test();<BR>    }<img src ="http://www.blogjava.net/haoqingshi/aggbug/16750.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/haoqingshi/" target="_blank">Java&Inter</a> 2005-10-25 14:12 <a href="http://www.blogjava.net/haoqingshi/articles/16750.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java调用外部应用程序</title><link>http://www.blogjava.net/haoqingshi/articles/16560.html</link><dc:creator>Java&amp;Inter</dc:creator><author>Java&amp;Inter</author><pubDate>Mon, 24 Oct 2005 05:38:00 GMT</pubDate><guid>http://www.blogjava.net/haoqingshi/articles/16560.html</guid><wfw:comment>http://www.blogjava.net/haoqingshi/comments/16560.html</wfw:comment><comments>http://www.blogjava.net/haoqingshi/articles/16560.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/haoqingshi/comments/commentRss/16560.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/haoqingshi/services/trackbacks/16560.html</trackback:ping><description><![CDATA[<P>调用外部应用程序(譬如VB,有应用程序窗口的情况)</P>
<P>import java.io.*;<BR>public class execOP {</P>
<P>&nbsp;public execOP(){<BR>&nbsp;&nbsp;//TODO<BR>&nbsp;}<BR>&nbsp;<BR>&nbsp;/**<BR>&nbsp; * 執行外部的程序(參數為數組).返回程序的輸出(不具有輸入的功能)<BR>&nbsp; * @param appParam&nbsp;&nbsp; 程序及參數組成的數組(每個參數為一個數組成員)<BR>&nbsp; * @return<BR>&nbsp; * @throws Exception<BR>&nbsp; */<BR>&nbsp;public String execExternalApp(String []appParam) throws Exception{<BR>&nbsp;&nbsp;String str="";<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;Process proc=Runtime.getRuntime().exec(appParam);<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;DataInputStream in = new DataInputStream(proc.getInputStream());<BR>&nbsp;&nbsp;DataInputStream error = new DataInputStream(proc.getErrorStream());<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;try<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;String tmp="";<BR>&nbsp;&nbsp;&nbsp;while ((tmp= in.readLine()) != null) { <BR>&nbsp;&nbsp;&nbsp;&nbsp;str+="控制台輸出:"+tmp+"\n";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;//System.out.println("控制台?出:"+tmp);&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;while ((tmp= error.readLine()) != null) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;str+="錯誤輸出:"+tmp+"\n";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;//System.out.println("???出:"+tmp);<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;catch(Exception e)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp; System.out.println("獲取應用程序輸出時發生IO錯誤"+e.getMessage());<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;return str;<BR>&nbsp;}<BR>&nbsp;<BR>&nbsp;/**<BR>&nbsp; * 執行外部的程序(參數為字符串).返回程序的輸出(不具有輸入的功能)<BR>&nbsp; * @param appParam&nbsp; 程序及參數組成的數組(每個參數為一個數組成員)<BR>&nbsp; * @return<BR>&nbsp; * @throws Exception<BR>&nbsp; */<BR>&nbsp;public String execExternalApp(String appParam) throws Exception{<BR>&nbsp;&nbsp;String str="";<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;Process proc = Runtime.getRuntime().exec(appParam);<BR>&nbsp;&nbsp;DataInputStream in = new DataInputStream(proc.getInputStream());<BR>&nbsp;&nbsp;DataInputStream error = new DataInputStream(proc.getErrorStream());<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;try{<BR>&nbsp;&nbsp;&nbsp;String tmp="";<BR>&nbsp;&nbsp;&nbsp;while ((tmp= in.readLine()) != null) {&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;str+="空隻台輸出:"+tmp+"\n";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;//System.out.println("控制台?出:"+tmp); <BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;while ((tmp= error.readLine()) != null) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;str+="錯誤輸出:"+tmp+"\n";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;//System.out.println("???出:"+tmp);&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;catch(Exception e){<BR>&nbsp;&nbsp;&nbsp; System.out.println("獲取應用程序輸出時發生IO錯誤:"+e.getMessage());<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;return str;<BR>&nbsp;}<BR>&nbsp;<BR>&nbsp;/**<BR>&nbsp; * 測試程序<BR>&nbsp; * @param args<BR>&nbsp; */<BR>&nbsp;public static void main(String[] args) {<BR>&nbsp;&nbsp;execOP exec=new execOP();<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;String appcmd="<A>\\\\IP\\c$\\Program</A> Files\\WIPTracking\\XraySystem.exe";<BR>&nbsp;&nbsp;//String appcmd=args[0];<BR>&nbsp;&nbsp;try{<BR>&nbsp;&nbsp;&nbsp; System.out.println(exec.execExternalApp(appcmd));<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;catch(Exception e){<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;}</P>
<P>&nbsp;}</P>
<P>}<BR></P><img src ="http://www.blogjava.net/haoqingshi/aggbug/16560.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/haoqingshi/" target="_blank">Java&Inter</a> 2005-10-24 13:38 <a href="http://www.blogjava.net/haoqingshi/articles/16560.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>