posts - 495,  comments - 11,  trackbacks - 0
           

          import java.sql.*;
          import java.util.*;

          class Sql
          {
          ???? public static void main(String[] args)
          {
          ????? try
          ???? {
          ???????? String query="select * from orders";
          ???????? String URL="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=Northwind";
          ???????? String userName = "sa";
          ???????? String userPwd = "14579";
          ???????? Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
          ???????? Connection conn=DriverManager.getConnection(URL,userName,userPwd);
          ???????? Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
          ???????? ResultSet rs=stmt.executeQuery(query);

          ???????? int i=0;
          ???????? for(i=0;i<10;i++)
          ???????? {
          ??????????? rs.next();
          ??????????? System.out.println(rs.getString(1));
          ???????? }
          ??????? //SQLServer2K自帶的樣例數(shù)據(jù)庫(kù)Northwind中,表Orders有多于10條,可能上百條記錄,所以只列10條!
          ????? }
          ????? catch(Exception e)
          ????? {
          ???????? System.out.println(e.getMessage());
          ????? }
          }
          }

          結(jié)果:

          posted @ 2007-05-25 22:28 jadmin 閱讀(106) | 評(píng)論 (0)編輯 收藏

          運(yùn)行本程序前需安裝SQL Server 2000 Driver for JDBC Service Pack 3

          測(cè)試代碼如下:

          // 導(dǎo)入Java SQL包,連接數(shù)據(jù)庫(kù)必需;
          import java.sql.*;

          public class TestDB
          {
          ??? public static void main(String[] args)
          ??? {
          ??????? String driverName = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
          ??????? String dbURL = "jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=pubs";
          ??????? String userName = "sa";
          ??????? String userPwd = "14579";
          ??????? Connection dbConn;

          ??????? try
          ??????? {
          ??????????? Class.forName(driverName);
          ??????????? dbConn = DriverManager.getConnection(dbURL, userName, userPwd);
          ??????????? System.out.println("Connection Successful!");
          ??????? }
          ??????? catch (Exception e)
          ??????? {
          ??????????? e.printStackTrace();
          ??????? }
          ??? }
          }

          運(yùn)行結(jié)果:

          posted @ 2007-05-25 22:25 jadmin 閱讀(92) | 評(píng)論 (0)編輯 收藏

          ????????? 經(jīng)過(guò)數(shù)年的“框架大戰(zhàn)”,Java界的各種框架找到了自己應(yīng)有的位置。

          ???????? Spring+Hibernate+Struts已成為Java開(kāi)發(fā)的主流體系。在這個(gè)體系中,Spring+Hibernate的地位應(yīng)該說(shuō)短期內(nèi)是難以撼動(dòng)了。除了新興的Jboss Seam作為挑戰(zhàn)者之外,幾乎難有勁敵。有趣的是當(dāng)初Spring、Hibernate作為挑戰(zhàn)者,將官方的EJB成功挑落馬下;這次反倒是官方的EBJ3成了挑戰(zhàn)者,不知結(jié)局如何。

          ???????? Java B/S編程中歷來(lái)戰(zhàn)火最激烈的其實(shí)還在Web層,框架的數(shù)量最多,爭(zhēng)議最大。
          一切由Struts而起,而Struts最終也坐穩(wěn)了第一個(gè)時(shí)代的王座。在技術(shù)層面,Struts 1.x已經(jīng)被無(wú)數(shù)人抱怨過(guò)、批評(píng)過(guò),但終于還是穩(wěn)坐王位,這充分說(shuō)明了習(xí)慣的力量。“穩(wěn)定壓倒一切”,這句話在IT技術(shù)領(lǐng)域仍舊適用。
          ???????? 其實(shí)IT應(yīng)用技術(shù),什么新鮮玩意并不難學(xué)。難的是標(biāo)準(zhǔn)化和規(guī)范化。每個(gè)程序員都有自己的思路和習(xí)慣,寫(xiě)出來(lái)的代碼自然是五花八門(mén)。Java何以成為編程界的老大,很重要的一點(diǎn)在于Java的規(guī)范化。這種規(guī)范化很高的語(yǔ)言適用于多人合作的大型項(xiàng)目,便于溝通和理解,也就便于集成和維護(hù)。Java世界為什么會(huì)框架橫飛,說(shuō)到底還是規(guī)范化的需要。純JSP和Struts寫(xiě)Web誰(shuí)快,擺明了是JSP。那撐飽了用Struts?原因在于100個(gè)人寫(xiě)出來(lái)的JSP,有100種寫(xiě)法;而100個(gè)人寫(xiě)出來(lái)的Struts,基本相似。Struts之成功,正緣于其在Java Web層的規(guī)范化方面所做出的貢獻(xiàn)。

          ???????? 然而長(zhǎng)江后浪推前浪,Struts 1.x的技術(shù)缺陷畢竟是隱患。
          ???????? Sun力推JSF,打算一雪Web層框架缺失之恥。可惜JSF既要沿用Swing的技術(shù)路線,又要學(xué)ASP.NET,還要照顧產(chǎn)商的IDE,結(jié)果搞了個(gè)四不象,弄得里外不是人。當(dāng)然Sun的技術(shù)實(shí)力畢竟是超強(qiáng)的,只要?jiǎng)e重蹈EJB的覆轍,拿出點(diǎn)專斷的精神(像這兩年的NetBeans),做出像Swing那樣水準(zhǔn)的東西,JSF當(dāng)大有作為。JSF現(xiàn)在比較有優(yōu)勢(shì)的是對(duì)Ajax的集成,這一點(diǎn)走在了其他框架的前面。

          ???????? 而Struts就更沒(méi)有志氣了,把WebWork換了個(gè)標(biāo)簽,湊出個(gè)Struts2,Bug多多。說(shuō)實(shí)在話,根本不如原版的WebWork。如果不是靠了原先的fans捧場(chǎng),根本就沒(méi)得混。不過(guò)Struts原本就不是以技術(shù)取勝的,靠的是搶占先機(jī)帶來(lái)的習(xí)慣優(yōu)勢(shì)。如果原先的fans們?cè)谶@兩年內(nèi)都能轉(zhuǎn)到Struts2,那么Struts二世仍將雄霸天下。

          ???????? 綜上所述,未來(lái)兩年,JSF與Struts將展開(kāi)Java Web框架的最終戰(zhàn)爭(zhēng)。
          ???????? 以筆者愚見(jiàn),結(jié)局有二:一是不論Struts還是JSF獲勝,Java Web層都將結(jié)束混戰(zhàn)的局面,這對(duì)Java Web開(kāi)發(fā)的標(biāo)準(zhǔn)化是非常有利的,并有助于鞏固Java在B/S界的地位;二是Struts1.x、Struts2、JSF三分天下,必然從整體上削弱Java在B/S界的競(jìng)爭(zhēng)力,并將進(jìn)一步被RoR、ASP.NET、PHP所蠶食。

          ???????? 以上內(nèi)容源自CSDN

          posted @ 2007-05-22 18:28 jadmin 閱讀(67) | 評(píng)論 (0)編輯 收藏

          ????????? 2007年5月8日,Sun推出了一種更友好的為消費(fèi)電子產(chǎn)品編寫(xiě)Java應(yīng)用軟件的方式,其目的是為了挖掘Java的潛力,并在新一代Web應(yīng)用領(lǐng)域方面擁有更大的發(fā)言權(quán)。

          ???????? 在JavaOne會(huì)議上,Sun負(fù)責(zé)軟件業(yè)務(wù)的執(zhí)行副總裁格林公布了JavaFX Script━━一種用于編寫(xiě)能夠在支持Java的PC和手機(jī)上運(yùn)行的應(yīng)用軟件的更簡(jiǎn)單的腳本語(yǔ)言。

          ???????? 為了解決手機(jī)的兼容性問(wèn)題,格林詳細(xì)闡述了JavaFX Mobile━━一種面向手機(jī)廠商、提高Java應(yīng)用軟件在不同手機(jī)間兼容性的軟件包。

          ???????? Sun官員還計(jì)劃發(fā)布最后一部分的開(kāi)放源代碼的Java,并闡述與Java相關(guān)的開(kāi)放源代碼項(xiàng)目的管理規(guī)則。

          ???????? Sun計(jì)劃通過(guò)JavaFX Script復(fù)興Java在小型設(shè)備和瀏覽器上的使用。格林說(shuō),Java不僅僅面向企業(yè),還面向消費(fèi)者。我們即將發(fā)布的腳本語(yǔ)言將極大地增加能夠?yàn)檫@一平臺(tái)開(kāi)發(fā)內(nèi)容的人的數(shù)量。

          ???????? JavaFX Script是一種在生產(chǎn)效率和易用性方面好于Java的腳本語(yǔ)言,能夠與Java緊密集成。開(kāi)發(fā)人員可以利用JavaFX Script編寫(xiě)能夠在支持Java的PC和手機(jī)上運(yùn)行的應(yīng)用軟件。

          posted @ 2007-05-22 18:20 jadmin 閱讀(52) | 評(píng)論 (0)編輯 收藏

          GMail Remote Command 可以遠(yuǎn)程實(shí)現(xiàn)關(guān)機(jī)、運(yùn)行程序、打開(kāi)網(wǎng)頁(yè),這一切都通過(guò)Gmail來(lái)實(shí)現(xiàn)的。
          GMail Remote Command 使用說(shuō)明:
          1.在你想要控制的機(jī)器上面,點(diǎn)擊運(yùn)行GRC.exe;
          2.輸入你的Gmail郵箱和密碼(假設(shè)Gmail郵箱是test@gmail.com),點(diǎn)擊Sign in,等待….當(dāng)Sign in變成

          Stop時(shí)候就OK了,一般幾秒就登錄成功了;
          3.在另外一臺(tái)機(jī)器打開(kāi)網(wǎng)頁(yè)進(jìn)入:http://www.gmail.com,用另外一個(gè)Gmai帳號(hào)登陸,然后寫(xiě)郵件;
          收件人:test@gmail.com 主題:shutdown
          然后發(fā)送這個(gè)空郵件,即可讓test@gmail.com的整個(gè)機(jī)器關(guān)機(jī)。
          命令:
          關(guān)機(jī) shutdown
          運(yùn)行程序 [open]c:\windows\system32\calc.exe[/open]
          打開(kāi)網(wǎng)頁(yè) [open]http://www.yangkui.cn[/open]

          posted @ 2007-05-22 17:55 jadmin 閱讀(79) | 評(píng)論 (0)編輯 收藏
          JAVA四種基本排序,包括冒泡法,插入法,選擇法,SHELL排序法.其中選擇法是冒泡法的改進(jìn),SHELL排序法是 插入法的改進(jìn).所以從根本上來(lái)說(shuō)可以歸納為兩種不同的排序方法:即:插入法&冒泡法

          一 插入法:遍歷排序集合,每到一個(gè)元素時(shí),都要將這個(gè)元素與所有它之前的元素遍歷比較一遍,讓符合排序順序的元素挨個(gè)移動(dòng)到當(dāng)前范圍內(nèi)它最應(yīng)該出現(xiàn)的位置。交換是相鄰遍歷移動(dòng),雙重循環(huán)控制實(shí)現(xiàn).這種排序法屬于地頭蛇類型,在我的地牌上我要把所有的東西按一定的順序規(guī)整,過(guò)來(lái)一個(gè),規(guī)整一個(gè).
          處理代碼如下:
          public void sort(int[] data) {
          int temp;
          for(int i=1; i〈data.length; i++){
          for(int j=i; (j〉0)&&(data[j]〉data[j-1]); j--){

          temp=date[j];
          data[j]=data[j-1];
          data[j-1]=temp; }
          }
          }
          二冒泡法:比較容易,它的內(nèi)層循環(huán)保證遍歷一次后,集合中最小(大)元素出現(xiàn)在它的正確位置,下一次就是次小元素。。。該方法在集合分布的各種情況下交換移動(dòng)的次數(shù)基本不變,屬于最慢的一種排序。實(shí)現(xiàn)也是雙重循環(huán)控制。這種排序法屬于過(guò)江龍,就是要找到極端,但是過(guò)獎(jiǎng)龍也有大哥,二哥等,所以他們只能是大哥挑了二哥挑.
          處理代碼如下:
          public static int [] maopao(int[] data) {
          int temp;
          for(int i=0; i〈data.length-1; i++){
          for(int j=i+1; j〈data.length; j++){
          if(data[i]〈data[j]){
          temp=data[i];
          data[i]=data[j];
          data[j]=temp;
          }
          }
          }

          return data;

          三選擇法:該方法只是通過(guò)遍歷集合記錄最小(大)元素的位置,一次遍歷完后,再進(jìn)行交換位置操作,類似冒泡,但在比較過(guò)程中,不進(jìn)行交換操作,只記錄元素位置。一次遍歷只進(jìn)行一次交換操作。這個(gè)對(duì)與交換次序比較費(fèi)時(shí)的元素比較適合。這種排序法比冒泡法要城府要深的多,我先記住極端數(shù)據(jù),待遍歷數(shù)據(jù)完了之后,我再處理,不像冒泡法那樣只要比自己極端一點(diǎn)的就要處理,選擇法只處理本身范圍內(nèi)的最極端數(shù)據(jù).
          public static void xuanze(int[] data) {
          int temp;
          for (int i = 0; i 〈 data.length; i++) {
          int lowIndex = i;
          for (int j = data.length - 1; j 〉 i; j--) {
          if (data[j] 〉 data[lowIndex]) {
          lowIndex = j;
          }
          }
          temp=data[i];
          data[i]=data[lowIndex];
          data[lowIndex]=temp;
          }
          }
          四 Shell排序:
          它是對(duì)插入排序的一種改進(jìn),是考慮將集合元素按照一定的基數(shù)劃分成組去排序,讓每一組在局部范圍內(nèi)先排成基本有序,最后在進(jìn)行一次所有元素的插入排序。
          public void sort(int[] data) {
          for(int i=data.length/2; i〉2; i/=2){
          for(int j=0; j〈i; j++){
          insertSort(data,j,i);
          }
          }
          insertSort(data,0,1);
          }

          private void insertSort(int[] data, int start, int inc) {
          int temp;
          for(int i=start+inc; i〈data.length; i+=inc){
          for(int j=i; (j〉=inc)&&(data[j]〈data[j-inc]); j-=inc){
          temp=data[j];
          data[j]=data[j-inc]
          data[j-inc]=temp;
          }
          }
          }
          posted @ 2007-05-22 17:44 jadmin 閱讀(54) | 評(píng)論 (0)編輯 收藏

          詳情見(jiàn)

          http://baike.baidu.com/view/8240.htm

          2006 年底,Sun 公司發(fā)布了 Java Standard Edition 6(Java SE 6)的最終正式版,代號(hào) Mustang(野馬)。跟 Tiger(Java SE 5)相比,Mustang 在性能方面有了不錯(cuò)的提升。與 Tiger 在 API 庫(kù)方面的大幅度加強(qiáng)相比,雖然 Mustang 在 API 庫(kù)方面的新特性顯得不太多,但是也提供了許多實(shí)用和方便的功能:在腳本,WebService,XML,編譯器 API,數(shù)據(jù)庫(kù),JMX,網(wǎng)絡(luò)和 Instrumentation 方面都有不錯(cuò)的新特性和功能加強(qiáng)。 本系列 文章主要介紹 Java SE 6 在 API 庫(kù)方面的部分新特性,通過(guò)一些例子和講解,幫助開(kāi)發(fā)者在編程實(shí)踐當(dāng)中更好的運(yùn)用 Java SE 6,提高開(kāi)發(fā)效率。

          Instrumentation 簡(jiǎn)介

          利用 Java 代碼,即 java.lang.instrument 做動(dòng)態(tài) Instrumentation 是 Java SE 5 的新特性,它把 Java 的 instrument 功能從本地代碼中解放出來(lái),使之可以用 Java 代碼的方式解決問(wèn)題。使用 Instrumentation,開(kāi)發(fā)者可以構(gòu)建一個(gè)獨(dú)立于應(yīng)用程序的代理程序(Agent),用來(lái)監(jiān)測(cè)和協(xié)助運(yùn)行在 JVM 上的程序,甚至能夠替換和修改某些類的定義。有了這樣的功能,開(kāi)發(fā)者就可以實(shí)現(xiàn)更為靈活的運(yùn)行時(shí)虛擬機(jī)監(jiān)控和 Java 類操作了,這樣的特性實(shí)際上提供了一種虛擬機(jī)級(jí)別支持的 AOP 實(shí)現(xiàn)方式,使得開(kāi)發(fā)者無(wú)需對(duì) JDK 做任何升級(jí)和改動(dòng),就可以實(shí)現(xiàn)某些 AOP 的功能了。

          在 Java SE 6 里面,instrumentation 包被賦予了更強(qiáng)大的功能:?jiǎn)?dòng)后的 instrument、本地代碼(native code)instrument,以及動(dòng)態(tài)改變 classpath 等等。這些改變,意味著 Java 具有了更強(qiáng)的動(dòng)態(tài)控制、解釋能力,它使得 Java 語(yǔ)言變得更加靈活多變。

          在 Java SE6 里面,最大的改變使運(yùn)行時(shí)的 Instrumentation 成為可能。在 Java SE 5 中,Instrument 要求在運(yùn)行前利用命令行參數(shù)或者系統(tǒng)參數(shù)來(lái)設(shè)置代理類,在實(shí)際的運(yùn)行之中,虛擬機(jī)在初始化之時(shí)(在絕大多數(shù)的 Java 類庫(kù)被載入之前),instrumentation 的設(shè)置已經(jīng)啟動(dòng),并在虛擬機(jī)中設(shè)置了回調(diào)函數(shù),檢測(cè)特定類的加載情況,并完成實(shí)際工作。但是在實(shí)際的很多的情況下,我們沒(méi)有辦法在虛擬機(jī)啟動(dòng)之時(shí)就為其設(shè)定代理,這樣實(shí)際上限制了 instrument 的應(yīng)用。而 Java SE 6 的新特性改變了這種情況,通過(guò) Java Tool API 中的 attach 方式,我們可以很方便地在運(yùn)行過(guò)程中動(dòng)態(tài)地設(shè)置加載代理類,以達(dá)到 instrumentation 的目的。

          另外,對(duì) native 的 Instrumentation 也是 Java SE 6 的一個(gè)嶄新的功能,這使以前無(wú)法完成的功能 —— 對(duì) native 接口的 instrumentation 可以在 Java SE 6 中,通過(guò)一個(gè)或者一系列的 prefix 添加而得以完成。

          最后,Java SE 6 里的 Instrumentation 也增加了動(dòng)態(tài)添加 class path 的功能。所有這些新的功能,都使得 instrument 包的功能更加豐富,從而使 Java 語(yǔ)言本身更加強(qiáng)大。

          Instrumentation 的基本功能和用法

          “java.lang.instrument”包的具體實(shí)現(xiàn),依賴于 JVMTI。JVMTI(Java Virtual Machine Tool Interface)是一套由 Java 虛擬機(jī)提供的,為 JVM 相關(guān)的工具提供的本地編程接口集合。JVMTI 是從 Java SE 5 開(kāi)始引入,整合和取代了以前使用的 Java Virtual Machine Profiler Interface (JVMPI) 和 the Java Virtual Machine Debug Interface (JVMDI),而在 Java SE 6 中,JVMPI 和 JVMDI 已經(jīng)消失了。JVMTI 提供了一套”代理”程序機(jī)制,可以支持第三方工具程序以代理的方式連接和訪問(wèn) JVM,并利用 JVMTI 提供的豐富的編程接口,完成很多跟 JVM 相關(guān)的功能。事實(shí)上,java.lang.instrument 包的實(shí)現(xiàn),也就是基于這種機(jī)制的:在 Instrumentation 的實(shí)現(xiàn)當(dāng)中,存在一個(gè) JVMTI 的代理程序,通過(guò)調(diào)用 JVMTI 當(dāng)中 Java 類相關(guān)的函數(shù)來(lái)完成 Java 類的動(dòng)態(tài)操作。除開(kāi) Instrumentation 功能外,JVMTI 還在虛擬機(jī)內(nèi)存管理,線程控制,方法和變量操作等等方面提供了大量有價(jià)值的函數(shù)。關(guān)于 JVMTI 的詳細(xì)信息,請(qǐng)參考 Java SE 6 文檔(請(qǐng)參見(jiàn) 參考資源)當(dāng)中的介紹。

          Instrumentation 的最大作用,就是類定義動(dòng)態(tài)改變和操作。在 Java SE 5 及其后續(xù)版本當(dāng)中,開(kāi)發(fā)者可以在一個(gè)普通 Java 程序(帶有 main 函數(shù)的 Java 類)運(yùn)行時(shí),通過(guò) –javaagent 參數(shù)指定一個(gè)特定的 jar 文件(包含 Instrumentation 代理)來(lái)啟動(dòng) Instrumentation 的代理程序。
          posted @ 2007-05-21 16:59 jadmin 閱讀(104) | 評(píng)論 (0)編輯 收藏

          import java.util.*;

          public class File extends java.io.File {
          ????

          ???? File(java.io.File file,String str){
          ???????? super(file,str);
          ???? }
          ???? File(String str1,String str2){
          ???????? super(str1,str2);
          ???? }
          ???? File(String str){
          ???????? super(str);
          ???? }
          ???? File(java.net.URI uri){
          ???????? super(uri);
          ???? }
          ???? public static void deleteDirs(java.io.File dir)throws Exception{
          ???????? m_root=dir;
          ???????? m_dirs= new ArrayList();
          ???????? if(!m_root.isDirectory()){
          ???????????? throw new Exception("Exception:\""+m_root.toString()+"\" is not a director");
          ???????? }
          ???????? else{
          ???????????? for(int i=0;i<m_dirs.size();i++){
          ???????????????? System.out.println(((File)m_dirs.get(i)).toString());
          ???????????? }
          ???????????? //delete all director
          ???????????? try{
          ???????????????? m_dirs.add(m_root);
          ???????????????? myDelete();
          ???????????? }
          ???????????? catch(Exception e){
          ???????????????? e.printStackTrace();
          ???????????? }???
          ???????? }???
          ???? }
          ???? /**
          ????? *
          ????? * @param dirPath?? String a director file path;
          ????? * @throws IOException if dirPath is not a director file path
          ????? */
          ???? public static void deleteDirs(String dirPath)throws Exception{
          ???????? m_root=new java.io.File(dirPath);
          ???????? deleteDirs(m_root);
          ???? }
          ????
          ???? public static void deleteSubDirs(String dirPath)throws Exception{
          ???????? m_root=new java.io.File(dirPath);
          ???????? deleteSubDirs(m_root);????
          ???? }
          ????
          ????
          ???? public static void deleteSubDirs(java.io.File dir)throws Exception{
          ???????? m_root=dir;
          ???????? m_dirs= new ArrayList();
          ???????? //deleteDirs(m_root);
          ???????? if(!m_root.isDirectory()){
          ???????????? throw new Exception("Exception:\""+m_root.toString()+"\" is not a director");
          ???????? }
          ????????
          ???????? else{
          ???????????? for(int i=0;i<m_dirs.size();i++){
          ???????????????? System.out.println(((File)m_dirs.get(i)).toString());
          ???????????? }
          ???????????? try{
          ???????????????? myDelete();
          ??????????? }
          ??????????? catch(Exception e){
          ??????????????????? e.printStackTrace();
          ??????????? }
          ??????????? }????
          ???? }
          ???? /*
          ????? *?? visit all a director and save them in a list
          ????? */
          ???? private static void visitAll(java.io.File tempRoot){
          ???????? //m_dirs.add(tempRoot);
          ???????? //System.out.println("函數(shù)開(kāi)始處:"+m_dirs.size());
          ????????
          ???????? java.io.File[] dirs=tempRoot.listFiles();
          ???????? if(dirs!=null){
          ????????
          ???????? List dirsList=Arrays.asList(dirs);
          ???????? //while(dirsList!=null){
          ???????????? if(dirsList==null){
          ???????????????? try{
          ???????????????????? tempRoot.delete();
          ???????????????? }
          ???????????????? catch(Exception e){
          ???????????????????? e.printStackTrace();
          ???????????????? }
          }
          ???????????? else{
          ????????????????
          ???????????????? m_dirs.addAll(dirsList);????
          ???????????????? //System.out.println(m_dirs.size());
          ???????????????? /*
          ???????????????? for(int i=0;i<dirs.length;i++){//print dirs
          ???????????????????? System.out.println("NO."+ ++counter+":"+dirs[i].toString());
          ???????????????? }
          ???????????????? */
          ???????????????? //System.out.println(m_dirs.size());
          ????????????????
          ???????????????? for(int i=0;i<dirsList.size();i++){
          ???????????????????? tempRoot=(java.io.File)dirsList.get(i);
          ???????????????????? visitAll(tempRoot);
          ???????????????????? /*
          ???????????????????? dirs=tempRoot.listFiles();
          ???????????????????? List dirsList= Arrays.asList(dirs);
          ???????????????????? */
          ???????????????????? //System.out.println(tempRoot.toString());
          ???????????????? }???
          ???????????? }
          ???????????? //return true;
          ???????? //}
          ???????? }
          ???? }
          ???? /*
          ????? * do delete
          ????? */
          ???? private static void myDelete()throws Exception{
          ???????? //m_dirs.add(m_root);
          ???????? visitAll(m_root);
          ????????
          ???????? if(m_dirs!=null){
          ????????????
          ???????????? //System.out.println("刪除前:"+m_dirs.size());
          ???????????? //System.out.println(m_dirs.size());
          ???????????? for(int i=m_dirs.size()-1;i>=0;i--){
          ???????????????? java.io.File f= (java.io.File)m_dirs.remove(i);
          ???????????????? //File f= (File)m_dirs.get(i);
          ???????????????? //System.out.println(f.toString());
          ???????????????? String fileName=f.toString();
          ????????????????
          ???????????????? if(!f.delete()){
          ???????????????????? throw new Exception("Exception: delete file "+ fileName+" false!");
          ???????????????????? //System.out.println("刪除文件/文件夾"+fileName+"失敗!");
          ???????????????? }
          ???????????? }
          ???????? }
          ???????? else{
          ???????????? throw new Exception("Exception: read file list of "+m_root.toString()+"false!");
          ???????????? //System.out.println("ArrayList==null");
          ???????? }
          ???? }
          ???? /*
          ????? * root director
          ????? */
          ???? private static java.io.File m_root;
          ????
          ???? private static ArrayList m_dirs;
          ???? //private static int counter=0;

          ???? public static void main(String[] args) {//測(cè)試類
          ????????
          ???????? File file =new File("H:/小說(shuō)/小四/天亮說(shuō)晚安");
          ???????? try{
          ???????????? File.deleteDirs("H:/小說(shuō)/小四/天亮說(shuō)晚安");
          ???????????? //File.deleteDirs(file);
          ???????????? //File.deleteSubDirs("H:/小說(shuō)/小四/天亮說(shuō)晚安");
          ???????????? //File.deleteSubDirs(file);
          //File f=new File("F:/test.txt");
          ???????????? //f.delete();
          ???????? }
          ???????? catch(Exception e){
          ???????????? e.printStackTrace();
          ???????? }
          ???????? System.out.println("刪除成功~");
          ???? }????
          }

          posted @ 2007-05-21 02:51 jadmin 閱讀(55) | 評(píng)論 (0)編輯 收藏

          ???????? 如果你是一個(gè)Java支持者,你一定不會(huì)陌生Netbeans,因?yàn)榇蠹叶际菑腘etbeans的愛(ài)恨交加中走過(guò)來(lái)的,初識(shí)Netbeans還是3.6版本,當(dāng)時(shí)無(wú)論從界面還是運(yùn)行上,真的不敢恭維,但是誰(shuí)又能說(shuō)Netbeans會(huì)停止它前進(jìn)的腳步呢?由于開(kāi)源腳步的加快,Borland提前宣布退出,給了Netbeans更多的機(jī)會(huì),也讓Netbeans在業(yè)界得到專業(yè)人士的賞識(shí),但是他真的走出充當(dāng)配角角色嗎?真的像Netbeans高級(jí)宣傳官所說(shuō)的那樣走出低谷了嗎?

            Netbeans拒絕與Eclipse合并

            隨著開(kāi)源的興起,Jbuilder光輝不在,Netbeans的市場(chǎng)份額在今年上半年有了明顯的增長(zhǎng),據(jù)國(guó)外權(quán)威調(diào)查機(jī)構(gòu)顯示,Eclipse 市場(chǎng)份額占45%,Netbeans占 30%,Jbuilder占15% ,其它IDE占5%,從調(diào)查分析來(lái)看,Netbeans的市場(chǎng)占有率正在上升,原來(lái)三國(guó)鼎立的局面因?yàn)镴builder的退出,使Eclipse對(duì)決 Netbeans大戰(zhàn)提前上演了,都說(shuō)這是一場(chǎng)勢(shì)均力敵的戰(zhàn)爭(zhēng),倒不如說(shuō)是兩大軟件巨頭的撕殺,2006年初IBM就開(kāi)始和Sun公司進(jìn)行談判,數(shù)月談判結(jié)果給了IBM當(dāng)頭一棒,Sun公司拒絕加入IBM主導(dǎo)的開(kāi)源項(xiàng)目Eclipse,在宣布放棄Eclipse同時(shí),不久Sun表示,他們不再試圖將Sun 發(fā)起的NetBeans.org開(kāi)放源Java工具項(xiàng)目與Eclipse合并。

            Sun公司認(rèn)為,加入Eclipse陣營(yíng)需要打破兩個(gè)組織之間的技術(shù)和組織差別,而這將對(duì)NetBeans和Eclipse項(xiàng)目現(xiàn)有的參與者造成不利影響。Sun公司開(kāi)發(fā)平臺(tái)集團(tuán)副總裁RichGreen表示,“我們雙方都確定我們不希望放棄現(xiàn)有項(xiàng)目”,“我們確定,合作社團(tuán)相對(duì)于削減成本等問(wèn)題更為重要。”

            Eclipse和NetBeans開(kāi)放源項(xiàng)目目的是開(kāi)發(fā)軟件以允許不同的Java開(kāi)發(fā)工具在單個(gè)編程應(yīng)用中能夠相互嵌和。比如,開(kāi)發(fā)人員可以將一家公司提供的源代碼管理工具與其他公司的代碼編輯器綜合在一起使用。

            Green稱,雙方起初討論放棄NetBeans,但很快轉(zhuǎn)而談判尋求將兩個(gè)開(kāi)放源項(xiàng)目統(tǒng)一在一個(gè)單一實(shí)體下。理論上,將兩個(gè)項(xiàng)目和并可以建立一個(gè)針對(duì)同一技術(shù)的更大社團(tuán),并確保兩個(gè)項(xiàng)目不會(huì)建立不兼容的代碼。但Green表示,如果重寫(xiě)各自的插件系統(tǒng)以及相關(guān)的工具平臺(tái)需要雙方花費(fèi)很長(zhǎng)時(shí)間和巨大開(kāi)銷。比如,Sun的商業(yè)開(kāi)發(fā)工具建立在NetBeans的基礎(chǔ)上,如果轉(zhuǎn)而采用Eclipse標(biāo)準(zhǔn)則需要進(jìn)行重大修改。

            Sun和IBM Eclipse未能走到一起,在兩大開(kāi)放源工具項(xiàng)目之間建立起一個(gè)鴻溝。Green表示,這樣也為開(kāi)發(fā)商提供了更多的選擇。并且,Sun仍然希望將來(lái)與Eclipse重開(kāi)談判之門(mén)。

            相對(duì)與Sun的內(nèi)斂相比,Eclipse基金會(huì)的執(zhí)行理事Mike Milinkovich要自信得多,在談到老競(jìng)爭(zhēng)對(duì)手時(shí),他說(shuō)這本來(lái)就是一場(chǎng)沒(méi)有懸念的戰(zhàn)爭(zhēng),我們已經(jīng)擁有了足夠多的用戶,而他們沒(méi)有,很明顯我們會(huì)贏得這場(chǎng)戰(zhàn)爭(zhēng),我只能祝他們好運(yùn)。

            關(guān)于兩位當(dāng)事人的觀點(diǎn)我們的記者也采訪了香港政府IT部門(mén)架構(gòu)師Recher,他說(shuō)這本身就是一場(chǎng)實(shí)力懸殊的競(jìng)爭(zhēng),雖然近期 Netbeans是在市場(chǎng)戰(zhàn)略上取得一些佳績(jī),但不能說(shuō)他們真正的贏得了這場(chǎng)勝利,他只不過(guò)是在分享Jbuilder拋棄的市場(chǎng)份額而已,Eclipse 并沒(méi)有因?yàn)樗脑黾佣鴾p少,Sun公司一直在用一種狹隘的心態(tài)在抵制自已競(jìng)爭(zhēng)對(duì)手,最近和IBM的談判崩裂,以及Sun一直都沒(méi)把OSGI列放JMX的標(biāo)準(zhǔn)中,就是很好的例證。

            Eclipse未來(lái)之路

            同時(shí)Recher也談到了Eclispe開(kāi)發(fā)在3個(gè)方面占勝了Netbeans.

            1. 在技術(shù)上Eclipse是良好的OSGI框架實(shí)現(xiàn)(Equinox是OSGi R4 core framework的一個(gè)實(shí)現(xiàn),而Eclipse IDE是基于Equinox項(xiàng)目開(kāi)發(fā)的一個(gè)典型例子OSGI的好處基本就是面向組件開(kāi)發(fā),并提供一個(gè)十分好用的plugs-in框架,開(kāi)發(fā)性強(qiáng)。況且 Eclipse本身就是一個(gè)RCP的容器---為未來(lái)RCP應(yīng)用程序的將來(lái)提供不可缺少而且成熟的工具和容器。

            2. 在市場(chǎng)上Netbeans支持的項(xiàng)目和工具太少了,因?yàn)楹芏嚅_(kāi)源項(xiàng)目都提供了大量Eclipse的plugs-in組件,這些是其它IDE 工具無(wú)法比擬的, 現(xiàn)在的 IBM已經(jīng)和Eclipse完全整合了(以前的WSAD還不能說(shuō)完全,但I(xiàn)RAD6.0就已經(jīng)很完全了),同時(shí)IBM推出RSA(Rational Software Architect)的工具可以把Eclipse+UML+RUP+IRAD比較完美結(jié)合,至少我認(rèn)為它是目前出來(lái)最好的工具了,整個(gè)RUP都可以涵蓋,而且還是支持UML2.0.

            3. 在背景方面Eclispe的流行完全是IBM在它萌芽階段進(jìn)行資金贊助的產(chǎn)物,有了IBM這個(gè)藍(lán)色巨人的支持, 它的前途無(wú)可限量,但是也不能小看了Sun公司的這個(gè)冷面殺手,有Sun這個(gè)強(qiáng)有力的后盾,雙方以后的競(jìng)爭(zhēng)會(huì)很激烈的.

            其實(shí)對(duì)于Eclipse未來(lái),我們國(guó)內(nèi)的架構(gòu)師們只是在應(yīng)用的角度上來(lái)看得在這個(gè)問(wèn)題,Mike Milinkovich在9月初的Eclipse 2006世界大會(huì)指出了Eclipse未來(lái)的發(fā)展和新技術(shù)走向,他告訴我們首先是圍繞富客戶端平臺(tái)的繼續(xù)增長(zhǎng)和采用。支持更多的語(yǔ)言。下個(gè)季度,我們計(jì)劃在Eclipse內(nèi)推出首版的PHP IDE項(xiàng)目,我們認(rèn)為這是一個(gè)非常令人激動(dòng)的項(xiàng)目。因?yàn)闊o(wú)論是對(duì)企業(yè)開(kāi)發(fā)者還是Web開(kāi)發(fā)者來(lái)說(shuō),PHP是一門(mén)非常重要的語(yǔ)言,因此使得Eclipse工具支持PHP是一件令我們激動(dòng)的事情。

            NetBeans未來(lái)走向

            在IDE開(kāi)發(fā)工具競(jìng)爭(zhēng)激烈的今天,Sun也逐步的調(diào)整了Netbeans市場(chǎng)戰(zhàn)略,在今年JavaOne大會(huì)上,Netbeans高級(jí)宣傳官 Tim Boudreau也談到了Netbeans以后發(fā)展動(dòng)向,他告訴我們,自從1998年以來(lái),NetBeans并沒(méi)有只為Java而<strong onmouseover="isShowAds = true;isShowAds2 = true;ads.Move(this,"http://rad.17luntan.com/UploadImage/36/633148531966718750.jpg","%u4E2D%u534E%u82F1%u624D%u7F51%uFF0C%u6709%u6548%u6C42%u804C%2C%u5E94%u8058%2C%u627E%u5DE5%u4F5C%u5C31%u5728%u8FD9%u91CC%21","43772","工作","%u5DE5%u4F5C","http%3A//chinahrafaad.allyes.com/main/adfclick%3Fdb%3Dchinahrafaad%26bid%3D41818%2C21083%2C187%26cid%3D16880%2C133%2C1%26sid%3D42304%26show%3Dignore%26url%3Dhttp%3A//www.chinahr.com/")" style="FONT-WEIGHT: normal; CURSOR: hand; COLOR: #0000ff; TEXT-DECORATION: underline" onclick="javascript:window.open("http://s4.17luntan.com/ClickPortal/WebClick.aspx?id=43772&k=%u5DE5%u4F5C&siteid=0098295a-e262-40f7-ae50-7a6fbbdb678b&url=http%3A//java.csdn.net/n/20061025/96733.html&gourl=http%3A//chinahrafaad.allyes.com/main/adfclick%3Fdb%3Dchinahrafaad%26bid%3D41818%2C21083%2C187%26cid%3D16880%2C133%2C1%26sid%3D42304%26show%3Dignore%26url%3Dhttp%3A//www.chinahr.com/&parm=2F5B371DE6B4180FC652E69EC2EBF65E7A9AA108AEB8FCBD&alliedsiteid=0");" onmouseout="isShowAds = false;isShowAds2 = false;">工作。它也是C/C++工具的基礎(chǔ),Sun公司已經(jīng)將它轉(zhuǎn)用于Solaris很多年了,對(duì)它的支持正在進(jìn)行擴(kuò)展化和通用化,不再僅限于Solaris。NetBeans也是HP公司用于OpenVMS的IDE,支持COBOL, Fortran, C/C++和其它語(yǔ)言。例如在今年JavaOne大會(huì)上我們演示的對(duì)VB的支持—實(shí)際上是讀取VB代碼,編譯成字節(jié)碼,然后運(yùn)行,有時(shí)會(huì)比它本應(yīng)生成的本地代碼運(yùn)行還要快。因此,我們已經(jīng)開(kāi)始了這個(gè)項(xiàng)目,也會(huì)有圍繞腳本方面的開(kāi)發(fā)做更多的努力。NetBeans并不一定要局限于Java IDE平臺(tái)—它對(duì)于Java已經(jīng)有了很大地支持,那是人們首先要考慮的事情。但是就NetBeans目前的發(fā)展來(lái)看,它已經(jīng)成為了一個(gè)語(yǔ)言無(wú)關(guān)的平臺(tái)。

            正象我們?cè)缙谔岬降模匾臇|西的壽命總是很長(zhǎng)。一些人聲稱Java會(huì)在5或10年里死亡,我們都會(huì)迎來(lái)下一個(gè)大的事物。即使真是那樣, NetBeans也一樣可能會(huì)支持下一個(gè)事物的到來(lái),但是對(duì)一個(gè)語(yǔ)言的壽命做假設(shè)的時(shí)候,有一件重事情要考慮,對(duì)于期望任何特殊的程序語(yǔ)言或范例的盛行周期日益變得更長(zhǎng)是很實(shí)際的,這有兩方面的原因。首先,我們?cè)诶L制人們?nèi)绾慰紤]告訴計(jì)算機(jī)工作的方式上的藍(lán)圖方面正越來(lái)越好,其次,一個(gè)語(yǔ)言統(tǒng)治的時(shí)間越長(zhǎng),它的代碼就會(huì)越多,因此移植的代價(jià)也就越大。于是你不得不緊跟一些事情,這些事情會(huì)強(qiáng)迫變化中的語(yǔ)言很豐富多彩。

            現(xiàn)在有很多有關(guān)腳本語(yǔ)言的談?wù)摚俏移诖谥髁骶幊陶Z(yǔ)言中的下一個(gè)重大變化是讓直覺(jué)上類似多核芯片的并行方式成為規(guī)范標(biāo)準(zhǔn)。我確信在未來(lái)的時(shí)間里這些目標(biāo)將會(huì)成我們考慮的主流。

            從上述的采訪中我們明顯看到了開(kāi)發(fā)公司的架構(gòu)師對(duì)于Eclipse的鐘愛(ài)程度,Eclipse已經(jīng)深入人心, Eclipse的強(qiáng)大是顯而易見(jiàn),記得Ruby剛剛在網(wǎng)上火爆的時(shí)候,Eclipse就迅速作出反應(yīng),推出了支持Ruby開(kāi)發(fā)插件,可是我們?cè)诜从^ Netbeas在5.5的版本還沒(méi)有這樣的計(jì)劃,Java之父Gosling曾說(shuō)過(guò)未來(lái)的Netbeans不將是純粹的Java開(kāi)發(fā)工具,它要涉及各個(gè)方面,以后也會(huì)支持Ruby開(kāi)發(fā),可是在他說(shuō)這些話的時(shí)候,Eclipse已經(jīng)在前進(jìn)的路上了,這難免令所有支持者感到失望,未來(lái)的日子,誰(shuí)將主宰我們都拭目以待。

          ???????? 以上內(nèi)容轉(zhuǎn)自:http://java.csdn.net/n/20061025/96733.html

          posted @ 2007-05-21 02:20 jadmin 閱讀(69) | 評(píng)論 (0)編輯 收藏
          僅列出標(biāo)題
          共50頁(yè): First 上一頁(yè) 41 42 43 44 45 46 47 48 49 下一頁(yè) Last 
          主站蜘蛛池模板: 五家渠市| 淮滨县| 上虞市| 台湾省| 永修县| 桓仁| 慈利县| 德昌县| 白玉县| 鄂尔多斯市| 绥德县| 闽侯县| 平阴县| 台前县| 蒙阴县| 松滋市| 淳化县| 铜梁县| 黄冈市| 松原市| 中卫市| 正定县| 临高县| 嘉峪关市| 东方市| 巴楚县| 德钦县| 衡阳县| 哈巴河县| 鹤壁市| 武威市| 崇明县| 宁海县| 蕲春县| 鄢陵县| 广昌县| 嘉善县| 囊谦县| 寻甸| 和顺县| 井陉县|