<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 495,  comments - 11,  trackbacks - 0
     
      1:清除sam文件:

      WinNT系列的系統(tǒng)賬戶信息是存在%systemroot%\system32\config\sam這個(gè)注冊(cè)表文件里的。 如果系統(tǒng)里沒(méi)有重要的賬戶,或者賬戶比較少,用刪除%systemroot%\system32\config\sam的方法是比較簡(jiǎn)單的,不過(guò)因?yàn)橄到y(tǒng)會(huì)還原為只有administrator(密碼為空)和guest二個(gè)賬戶,所以有些程序因?yàn)樗鼈兯蕾嚨馁~戶丟失了,如iis、vmware就不能啟動(dòng)了。

       原來(lái)聽說(shuō)這種方法只能適用于nt workstation系列(2kpro),不能用于server,我在2000professional和2000 advanced server上試驗(yàn)都是成功的。不知道為什么會(huì)有上述說(shuō)法,可能是活動(dòng)目錄ad下不行吧。

       當(dāng)然首先你要能夠訪問(wèn)系統(tǒng)分區(qū),來(lái)把sam文件改名或者刪除。如果是fat32、fat分區(qū),使用98啟動(dòng)盤就行了。如果是ntfs分區(qū),可以使用winternal的ntfs for dos、ntfs for 98或者是支持ntfs的啟動(dòng)光盤,再或者掛到其他win2000、linux等機(jī)器上,再再或者重新安裝一個(gè)新的win2000。   

      2:專用工具:

      windows管理員密碼丟失還有一個(gè)解決方法是使用Petter Nordahl-Hagen的The Offline NT Password Editor(http://home.eunet.no/~pnordahl/ntpasswd/),這個(gè)工具是離線修改注冊(cè)表文件sam來(lái)設(shè)置密碼的。需要用他的映像文件制作啟動(dòng)盤來(lái)引導(dǎo),進(jìn)而訪問(wèn)ntfs分區(qū)重新設(shè)置密碼;雖然作者經(jīng)常更新他的程序,不過(guò)我還是會(huì)擔(dān)心他直接操作sam文件的安全性,可能有時(shí)會(huì)導(dǎo)致系統(tǒng)出錯(cuò)。可能還有其他類似工具吧,恕我無(wú)知。

      3:還有一種想法就是用一個(gè)修改密碼的小程序來(lái)替換系統(tǒng)啟動(dòng)的必要程序,然后系統(tǒng)啟動(dòng)時(shí)就會(huì)替換密碼,隨后把被替換的程序在還原就行了。當(dāng)然首先你還是要能夠訪問(wèn)系統(tǒng)分區(qū),來(lái)替換隨系統(tǒng)啟動(dòng)的程序。   

      替換系統(tǒng)啟動(dòng)的必要程序的一種方法是我寫的一個(gè)清除administrator密碼的小程序(CleanPwd:http://www.BingleSite.net/myprog/CleanPwd/CleanPwd.rar),他所作的就是把a(bǔ)dministrator密碼清空。使用方法如下:

      1):用雙系統(tǒng)或者啟動(dòng)盤或者掛到別的系統(tǒng)上,如果是NTFS分區(qū)其他系統(tǒng)或啟動(dòng)盤要能讀寫NTFS分區(qū),把windows安裝目錄下的system32\svchost.exe改名svchost.bak.exe備份,把CleanPwd.exe拷貝成svchost.exe。   

      2):?jiǎn)?dòng)該系統(tǒng),就把a(bǔ)dministrator的密碼清空了,可以直接登陸。   

      3):把svchost.bak.exe 恢復(fù)就行了(如果使用替換的是svchost,最好再啟動(dòng)rpc服務(wù))。為什么選用svchost.exe而不是其他程序,因?yàn)槊總€(gè)windows2000系統(tǒng)都有這幾個(gè)進(jìn)程,System(kernel Executive and kernel)、smss(session manager)、csrss(win32 subsystem)、winlogon(logon process)、services(Service control manager)、lsass(local security authentication server ) 如果任何一個(gè)被殺掉或者出錯(cuò),系統(tǒng)將重新啟動(dòng)。不過(guò)在lsass啟動(dòng)之前你不能修改密碼,所以不能選用這幾個(gè)程序。

      另外系統(tǒng)中一般還有以下一些程序:svchost.exe(Remote Procedure Call (RPC) 還有其他一些服務(wù))、WBEM\WinMgmt.exe(Windows Management Instrumentation)、mstask.exe(Task Scheduler)、regsvc.exe(Remote Registry Service) 可能還有其他服務(wù)程序,你可能禁止了除RPC之外的其他服務(wù),但不會(huì)禁止rpc,否則系統(tǒng)工作就不正常了。所以我選擇了svchost,如果你知道其他服務(wù)會(huì)自動(dòng)啟動(dòng),你也可以選擇它。當(dāng)然如果系統(tǒng)安裝了殺毒軟件的話,你替換殺毒軟件也可以,因?yàn)橐话銡⒍拒浖紩?huì)在系統(tǒng)啟動(dòng)是啟動(dòng)殺毒防火墻來(lái)殺毒的。
    posted @ 2007-05-28 11:56 jadmin 閱讀(72) | 評(píng)論 (0)編輯 收藏

    ??????? 2007 年將是載入史冊(cè)的一年,Sun Microsystems 公司將于這一年在開源許可協(xié)議下發(fā)布 Java 開發(fā)包(JDK),從而放棄了對(duì) Java? 平臺(tái)的統(tǒng)馭,將權(quán)力交給了 Java 開發(fā)人員社區(qū)!在本文中,Java 開發(fā)人員 Elliotte Rusty Harold 從各個(gè)方面預(yù)測(cè)了 Java 平臺(tái)的新方向,從腳本到 bug 修復(fù)到新語(yǔ)法。

      2006 年又是 Java 平臺(tái)繁榮的一年。盡管遭遇了來(lái)自 Microsoft(C#)和腳本語(yǔ)言社區(qū)(Ruby)的沖擊,但 Java 語(yǔ)言仍然保持著其世界頭號(hào)編程語(yǔ)言的地位。同時(shí),盡管 Java 6 的發(fā)布很值得慶祝,但比起宣布 Java 將在 GNU General Public License 下完全開源這一事件來(lái)說(shuō),卻不免有些黯然失色。Java 在 2007 年還能保持這種勢(shì)頭嗎?讓我們來(lái)看一下成敗的可能。

      Java 平臺(tái)將成為開源平臺(tái)

      2007 年上半年,Sun 將在一個(gè)開源許可協(xié)議下發(fā)布 Java 開發(fā)包(JDK)。解除 JDK 的禁錮對(duì)于 Java 開發(fā)人員社區(qū)來(lái)說(shuō)是巨大的一步,它將在今后的十年中推動(dòng) Java 平臺(tái)的發(fā)展。

      JDK 的質(zhì)量將會(huì)顯著改善,因?yàn)槌绦騿T們不再僅僅報(bào)告 bug 并開始修復(fù)。Java Developer Connection 的 bug 報(bào)告將會(huì)包括對(duì) JDK 中的問(wèn)題部分的詳細(xì)分析,并提供修復(fù)的補(bǔ)丁。正如Linus 法則 所陳述的那樣,“只要給予足夠的關(guān)注,任何 bug 都是顯而易見”,即調(diào)試是可并行進(jìn)行的。優(yōu)化也是一樣。開源使兩者得以 并行。

      分支項(xiàng)目

      遺憾的是,設(shè)計(jì)并不是和調(diào)試、優(yōu)化一樣可以并行完成的。清潔的 API 有時(shí)也需要有一只獨(dú)裁的手。但獨(dú)裁者的缺點(diǎn)是:有時(shí)他們知道在做什么,有時(shí)卻不知道。意圖成為獨(dú)裁者的各方面之間的競(jìng)爭(zhēng)往往是發(fā)現(xiàn)問(wèn)題最佳解決方案的惟一方式。

      很少有公司能夠負(fù)擔(dān)得起這樣的代價(jià),為一個(gè)產(chǎn)品開發(fā)多個(gè)獨(dú)立的實(shí)現(xiàn),以便在多個(gè)產(chǎn)品中選定保留一個(gè)而摒棄其余的產(chǎn)品,但開源社區(qū)卻在朝這個(gè)方向努力。所以,您會(huì)在 Java 平臺(tái)的各個(gè)層次中發(fā)現(xiàn)分支產(chǎn)品:語(yǔ)言、虛擬機(jī)和庫(kù)。大多數(shù)的分支產(chǎn)品會(huì)失敗,但這沒(méi)什么。好主意會(huì)脫穎而出。一些分支產(chǎn)品會(huì)一直存在下去,一些會(huì)重新并入標(biāo)準(zhǔn) JDK 中。明年的這個(gè)時(shí)候,分支產(chǎn)品與主流產(chǎn)品之間的差異也許不會(huì)很明顯,但這個(gè)過(guò)程會(huì)繼續(xù)下去。

      Sun 會(huì)在幾個(gè)月后發(fā)布 Java 7,Dolphin 的一個(gè)早期的 beta 版,以此作為開端。Sun 無(wú)法發(fā)布更早的 JDK 版本,因?yàn)榇嬖谝恍┲挥性?Dolphin 中才能解決的構(gòu)建問(wèn)題和許可協(xié)議問(wèn)題。盡管如此,仍有望看到第三方著手進(jìn)一步細(xì)分 Sun 的版本,來(lái)提供 Java 6、Java 5、Java 1.4,甚至更早版本的流行開源實(shí)現(xiàn)。

      早期的一些探尋分支產(chǎn)品的人們可能會(huì)侵犯 Sun 公司的商標(biāo),收到 Sun 的律師寄來(lái)的討厭的律師信。我們需要一個(gè)通用的未注冊(cè)為商標(biāo)的名字,讓所有人都能使用。我建議用 “J” —— 我希望沒(méi)人用單字母作商標(biāo)。

      開源項(xiàng)目從未消亡,只是有些褪色。就像之前的 Blackdown Project、GNU Classpath、Kaffe 和其他開源 JDK 項(xiàng)目一樣,他們的開發(fā)人員都轉(zhuǎn)向其他事情了。如果一個(gè)項(xiàng)目至今還沒(méi)有達(dá)到 1.0,那么恐怕以后永遠(yuǎn)也達(dá)不到了。

      期待 Java 7

      Dolphin 不會(huì)在 2007 年發(fā)布。2008 年是更為現(xiàn)實(shí)的目標(biāo)。那就是說(shuō),工作尚在進(jìn)行中,它的一些功能也許會(huì)作為早期的標(biāo)準(zhǔn)擴(kuò)展或至少作為 beta 登場(chǎng)。

      遺憾的是,為一門語(yǔ)言添加功能遠(yuǎn)比刪除功能要簡(jiǎn)單得多。幾乎不可避免地,隨著時(shí)間的推移,語(yǔ)言不是朝著簡(jiǎn)單的方向發(fā)展,而是越來(lái)越復(fù)雜,越來(lái)越讓人困惑。即使是那些單獨(dú)看起來(lái)很好的功能,在彼此疊加后也會(huì)出現(xiàn)問(wèn)題。

      令人遺憾,Java 社區(qū)沒(méi)有接受這個(gè)教訓(xùn),盡管這種失敗并無(wú)特殊性。但總有一些太酷又太讓人激動(dòng)的新語(yǔ)法令語(yǔ)言設(shè)計(jì)者難以抗拒 —— 即便這樣的新語(yǔ)法不能解決任何實(shí)際問(wèn)題。于是對(duì) Java 7 的新語(yǔ)言功能就有了巨大的要求,包括閉包、多繼承和操作符重載。

      我猜想在這一年結(jié)束前,會(huì)在 Java 7 beta 中看到閉包,也許還能看到操作符重載(有五成的把握),但不會(huì)出現(xiàn)多繼承。Java 中有太多東西是基于單個(gè)根的繼承層次。沒(méi)有可行的方式改進(jìn)多繼承,使之適應(yīng)這門語(yǔ)言。

      目前有許多語(yǔ)法糖方面的提議,有一些有意義,有一些沒(méi)有。許多提議都專注于將像 getFoo() 這樣的方法替換為像 -> 這樣的操作符。

    posted @ 2007-05-28 01:51 jadmin 閱讀(42) | 評(píng)論 (0)編輯 收藏

    import java.lang.reflect.*;

    /*************************************************
    md5 類實(shí)現(xiàn)了RSA Data Security, Inc.在提交給IETF
    的RFC1321中的MD5 message-digest 算法。
    *************************************************/

    public class MD5
    {
    // 下面這些S11-S44實(shí)際上是一個(gè)4*4的矩陣,這樣寫是方便修改
    static final int S11 = 7;
    static final int S12 = 12;
    static final int S13 = 17;
    static final int S14 = 22;

    static final int S21 = 5;
    static final int S22 = 9;
    static final int S23 = 14;
    static final int S24 = 20;

    static final int S31 = 4;
    static final int S32 = 11;
    static final int S33 = 16;
    static final int S34 = 23;

    static final int S41 = 6;
    static final int S42 = 10;
    static final int S43 = 15;
    static final int S44 = 21;

    static final byte[] PADDING = { -128, 0, 0, 0, 0, 0, 0, 0, 0,
    ???? 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    ???? 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    ???? 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

    // 下面的三個(gè)成員是MD5計(jì)算過(guò)程中用到的3個(gè)核心數(shù)據(jù),在原始的C實(shí)現(xiàn)中
    // 被定義到MD5_CTX結(jié)構(gòu)中

    private long[] state = new long[4];??? // state (ABCD)
    private long[] count = new long[2];??? // number of bits, modulo 2^64 (lsb first)
    private byte[] buffer = new byte[64]; // input buffer

    // digestHexStr是MD5的唯一一個(gè)公共成員,是最新一次計(jì)算結(jié)果的
    //??? 16進(jìn)制ASCII表示.

    public String digestHexStr;

    // digest,是最新一次計(jì)算結(jié)果的2進(jìn)制內(nèi)部表示,表示128bit的MD5值.

    private byte[] digest = new byte[16];

    // getMD5ofStr是類MD5最主要的公共方法,入口參數(shù)是你想要進(jìn)行MD5變換的字符串
    //??? 返回的是變換完的結(jié)果,這個(gè)結(jié)果是從公共成員digestHexStr取得的.
    ??
    public String getMD5ofStr(String inbuf)
    {
    ??? md5Init();
    ??? md5Update(inbuf.getBytes(), inbuf.length());
    ??? md5Final();
    ??? digestHexStr = "";
    ??? for (int i = 0; i < 16; i++)
    ??? {
    ???? digestHexStr += byteHEX(digest[i]);
    ??? }
    ??? return digestHexStr;
    }

    // 這是MD5這個(gè)類的標(biāo)準(zhǔn)構(gòu)造函數(shù),JavaBean要求有一個(gè)public的并且沒(méi)有參數(shù)的構(gòu)造函數(shù)
    public MD5()
    {
    ??? md5Init();
    ??? return;
    }

    // md5Init是一個(gè)初始化函數(shù),初始化核心變量,裝入標(biāo)準(zhǔn)的幻數(shù)

    private void md5Init()
    {
    ??? count[0] = 0L;
    ??? count[1] = 0L;
    ??? // Load magic initialization constants.

    ??? state[0] = 0x67452301L;
    ??? state[1] = 0xefcdab89L;
    ??? state[2] = 0x98badcfeL;
    ??? state[3] = 0x10325476L;

    ??? return;
    }

    // F, G, H ,I 是4個(gè)基本的MD5函數(shù),在原始的MD5的C實(shí)現(xiàn)中,由于它們是
    //??? 簡(jiǎn)單的位運(yùn)算,可能出于效率的考慮把它們實(shí)現(xiàn)成了宏,在java中,我們把它們
    // 實(shí)現(xiàn)成了private方法,名字保持了原來(lái)C中的。
    ??
    private long F(long x, long y, long z) {
    ??? return (x & y) | ((~x) & z);
    }
    private long G(long x, long y, long z) {
    ??? return (x & z) | (y & (~z));
    }
    private long H(long x, long y, long z) {
    ??? return x ^ y ^ z;
    }
    private long I(long x, long y, long z) {
    ??? return y ^ (x | (~z));
    }

    // FF,GG,HH和II將調(diào)用F,G,H,I進(jìn)行近一步變換

    private long FF(long a, long b, long c, long d, long x, long s,long ac) {
    ??? a += F (b, c, d) + x + ac;
    ??? a = ((int) a << s) | ((int) a >>> (32 - s));
    ??? a += b;
    ??? return a;
    }

    private long GG(long a, long b, long c, long d, long x, long s,long ac) {
    ??? a += G (b, c, d) + x + ac;
    ??? a = ((int) a << s) | ((int) a >>> (32 - s));
    ??? a += b;
    ??? return a;
    }
    private long HH(long a, long b, long c, long d, long x, long s,long ac) {
    ??? a += H (b, c, d) + x + ac;
    ??? a = ((int) a << s) | ((int) a >>> (32 - s));
    ??? a += b;
    ??? return a;
    }
    private long II(long a, long b, long c, long d, long x, long s,long ac) {
    ??? a += I (b, c, d) + x + ac;
    ??? a = ((int) a << s) | ((int) a >>> (32 - s));
    ??? a += b;
    ??? return a;
    }

    // md5Update是MD5的主計(jì)算過(guò)程,inbuf是要變換的字節(jié)串,inputlen是長(zhǎng)度,這個(gè)
    // 函數(shù)由getMD5ofStr調(diào)用,調(diào)用之前需要調(diào)用md5init,因此把它設(shè)計(jì)成private的
    ??
    private void md5Update(byte[] inbuf, int inputLen) {
    ??? int i, index, partLen;
    ??? byte[] block = new byte[64];
    ??? index = (int)(count[0] >>> 3) & 0x3F;
    ??? // /* Update number of bits */
    ??? if ((count[0] += (inputLen << 3)) < (inputLen << 3))
    ???? count[1]++;
    ??? count[1] += (inputLen >>> 29);

    ??? partLen = 64 - index;

    ??? // Transform as many times as possible.
    ??? if (inputLen >= partLen) {
    ???? md5Memcpy(buffer, inbuf, index, 0, partLen);
    ???? md5Transform(buffer);

    ???? for (i = partLen; i + 63 < inputLen; i += 64) {

    ????? md5Memcpy(block, inbuf, 0, i, 64);
    ????? md5Transform (block);
    ???? }
    ???? index = 0;

    ??? } else
    ???? i = 0;

    ??? ///* Buffer remaining input */
    ??? md5Memcpy(buffer, inbuf, index, i, inputLen - i);
    }
    private void md5Final () {
    ??? byte[] bits = new byte[8];
    ??? int index, padLen;

    ??? ///* Save number of bits */
    ??? Encode (bits, count, 8);

    ??? ///* Pad out to 56 mod 64.
    ??? index = (int)(count[0] >>> 3) & 0x3f;
    ??? padLen = (index < 56) ? (56 - index) : (120 - index);
    ??? md5Update (PADDING, padLen);

    ??? ///* Append length (before padding) */
    ??? md5Update(bits, 8);

    ??? ///* Store state in digest */
    ??? Encode (digest, state, 16);
    }

    // md5Memcpy是一個(gè)內(nèi)部使用的byte數(shù)組的塊拷貝函數(shù),從input的inpos開始把len長(zhǎng)度的
    ??? //??? 字節(jié)拷貝到output的outpos位置開始
    ??
    private void md5Memcpy (byte[] output, byte[] input,int outpos, int inpos, int len){
    ??? int i;

    ??? for (i = 0; i < len; i++)
    ???? output[outpos + i] = input[inpos + i];
    }

    // md5Transform是MD5核心變換程序,有md5Update調(diào)用,block是分塊的原始字節(jié)
    ??
    private void md5Transform (byte block[]) {
    ??? long a = state[0], b = state[1], c = state[2], d = state[3];
    ??? long[] x = new long[16];

    ??? Decode (x, block, 64);

    ??? /* Round 1 */
    ??? a = FF (a, b, c, d, x[0], S11, 0xd76aa478L); /* 1 */
    ??? d = FF (d, a, b, c, x[1], S12, 0xe8c7b756L); /* 2 */
    ??? c = FF (c, d, a, b, x[2], S13, 0x242070dbL); /* 3 */
    ??? b = FF (b, c, d, a, x[3], S14, 0xc1bdceeeL); /* 4 */
    ??? a = FF (a, b, c, d, x[4], S11, 0xf57c0fafL); /* 5 */
    ??? d = FF (d, a, b, c, x[5], S12, 0x4787c62aL); /* 6 */
    ??? c = FF (c, d, a, b, x[6], S13, 0xa8304613L); /* 7 */
    ??? b = FF (b, c, d, a, x[7], S14, 0xfd469501L); /* 8 */
    ??? a = FF (a, b, c, d, x[8], S11, 0x698098d8L); /* 9 */
    ??? d = FF (d, a, b, c, x[9], S12, 0x8b44f7afL); /* 10 */
    ??? c = FF (c, d, a, b, x[10], S13, 0xffff5bb1L); /* 11 */
    ??? b = FF (b, c, d, a, x[11], S14, 0x895cd7beL); /* 12 */
    ??? a = FF (a, b, c, d, x[12], S11, 0x6b901122L); /* 13 */
    ??? d = FF (d, a, b, c, x[13], S12, 0xfd987193L); /* 14 */
    ??? c = FF (c, d, a, b, x[14], S13, 0xa679438eL); /* 15 */
    ??? b = FF (b, c, d, a, x[15], S14, 0x49b40821L); /* 16 */

    ??? /* Round 2 */
    ??? a = GG (a, b, c, d, x[1], S21, 0xf61e2562L); /* 17 */
    ??? d = GG (d, a, b, c, x[6], S22, 0xc040b340L); /* 18 */
    ??? c = GG (c, d, a, b, x[11], S23, 0x265e5a51L); /* 19 */
    ??? b = GG (b, c, d, a, x[0], S24, 0xe9b6c7aaL); /* 20 */
    ??? a = GG (a, b, c, d, x[5], S21, 0xd62f105dL); /* 21 */
    ??? d = GG (d, a, b, c, x[10], S22, 0x2441453L); /* 22 */
    ??? c = GG (c, d, a, b, x[15], S23, 0xd8a1e681L); /* 23 */
    ??? b = GG (b, c, d, a, x[4], S24, 0xe7d3fbc8L); /* 24 */
    ??? a = GG (a, b, c, d, x[9], S21, 0x21e1cde6L); /* 25 */
    ??? d = GG (d, a, b, c, x[14], S22, 0xc33707d6L); /* 26 */
    ??? c = GG (c, d, a, b, x[3], S23, 0xf4d50d87L); /* 27 */
    ??? b = GG (b, c, d, a, x[8], S24, 0x455a14edL); /* 28 */
    ??? a = GG (a, b, c, d, x[13], S21, 0xa9e3e905L); /* 29 */
    ??? d = GG (d, a, b, c, x[2], S22, 0xfcefa3f8L); /* 30 */
    ??? c = GG (c, d, a, b, x[7], S23, 0x676f02d9L); /* 31 */
    ??? b = GG (b, c, d, a, x[12], S24, 0x8d2a4c8aL); /* 32 */

    ??? /* Round 3 */
    ??? a = HH (a, b, c, d, x[5], S31, 0xfffa3942L); /* 33 */
    ??? d = HH (d, a, b, c, x[8], S32, 0x8771f681L); /* 34 */
    ??? c = HH (c, d, a, b, x[11], S33, 0x6d9d6122L); /* 35 */
    ??? b = HH (b, c, d, a, x[14], S34, 0xfde5380cL); /* 36 */
    ??? a = HH (a, b, c, d, x[1], S31, 0xa4beea44L); /* 37 */
    ??? d = HH (d, a, b, c, x[4], S32, 0x4bdecfa9L); /* 38 */
    ??? c = HH (c, d, a, b, x[7], S33, 0xf6bb4b60L); /* 39 */
    ??? b = HH (b, c, d, a, x[10], S34, 0xbebfbc70L); /* 40 */
    ??? a = HH (a, b, c, d, x[13], S31, 0x289b7ec6L); /* 41 */
    ??? d = HH (d, a, b, c, x[0], S32, 0xeaa127faL); /* 42 */
    ??? c = HH (c, d, a, b, x[3], S33, 0xd4ef3085L); /* 43 */
    ??? b = HH (b, c, d, a, x[6], S34, 0x4881d05L); /* 44 */
    ??? a = HH (a, b, c, d, x[9], S31, 0xd9d4d039L); /* 45 */
    ??? d = HH (d, a, b, c, x[12], S32, 0xe6db99e5L); /* 46 */
    ??? c = HH (c, d, a, b, x[15], S33, 0x1fa27cf8L); /* 47 */
    ??? b = HH (b, c, d, a, x[2], S34, 0xc4ac5665L); /* 48 */

    ??? /* Round 4 */
    ??? a = II (a, b, c, d, x[0], S41, 0xf4292244L); /* 49 */
    ??? d = II (d, a, b, c, x[7], S42, 0x432aff97L); /* 50 */
    ??? c = II (c, d, a, b, x[14], S43, 0xab9423a7L); /* 51 */
    ??? b = II (b, c, d, a, x[5], S44, 0xfc93a039L); /* 52 */
    ??? a = II (a, b, c, d, x[12], S41, 0x655b59c3L); /* 53 */
    ??? d = II (d, a, b, c, x[3], S42, 0x8f0ccc92L); /* 54 */
    ??? c = II (c, d, a, b, x[10], S43, 0xffeff47dL); /* 55 */
    ??? b = II (b, c, d, a, x[1], S44, 0x85845dd1L); /* 56 */
    ??? a = II (a, b, c, d, x[8], S41, 0x6fa87e4fL); /* 57 */
    ??? d = II (d, a, b, c, x[15], S42, 0xfe2ce6e0L); /* 58 */
    ??? c = II (c, d, a, b, x[6], S43, 0xa3014314L); /* 59 */
    ??? b = II (b, c, d, a, x[13], S44, 0x4e0811a1L); /* 60 */
    ??? a = II (a, b, c, d, x[4], S41, 0xf7537e82L); /* 61 */
    ??? d = II (d, a, b, c, x[11], S42, 0xbd3af235L); /* 62 */
    ??? c = II (c, d, a, b, x[2], S43, 0x2ad7d2bbL); /* 63 */
    ??? b = II (b, c, d, a, x[9], S44, 0xeb86d391L); /* 64 */

    ??? state[0] += a;
    ??? state[1] += b;
    ??? state[2] += c;
    ??? state[3] += d;
    }

    // Encode把long數(shù)組按順序拆成byte數(shù)組,因?yàn)閖ava的long類型是64bit的,
    // 只拆低32bit,以適應(yīng)原始C實(shí)現(xiàn)的用途
    ??
    private void Encode (byte[] output, long[] input, int len)
    {
    ??? int i, j;

    ??? for (i = 0, j = 0; j < len; i++, j += 4) {
    ???? output[j] = (byte)(input[i] & 0xffL);
    ???? output[j + 1] = (byte)((input[i] >>> 8) & 0xffL);
    ???? output[j + 2] = (byte)((input[i] >>> 16) & 0xffL);
    ???? output[j + 3] = (byte)((input[i] >>> 24) & 0xffL);
    ??? }
    }

    // Decode把byte數(shù)組按順序合成成long數(shù)組,因?yàn)閖ava的long類型是64bit的,
    ??? //??? 只合成低32bit,高32bit清零,以適應(yīng)原始C實(shí)現(xiàn)的用途
    ??
    private void Decode (long[] output, byte[] input, int len)
    {
    ??? int i, j;

    ??? for (i = 0, j = 0; j < len; i++, j += 4)
    ???? output[i] = b2iu(input[j]) |
    ????? (b2iu(input[j + 1]) << 8) |
    ????? (b2iu(input[j + 2]) << 16) |
    ????? (b2iu(input[j + 3]) << 24);

    ???? return;
    }

    // b2iu是一個(gè)把byte按照不考慮正負(fù)號(hào)的原則的"升位"程序,因?yàn)閖ava沒(méi)有unsigned運(yùn)算
    ??
    public static long b2iu(byte b) {
    ??? return b < 0 ? b & 0x7F + 128 : b;
    }

    // byteHEX(),用來(lái)把一個(gè)byte類型的數(shù)轉(zhuǎn)換成十六進(jìn)制的ASCII表示,
    //???? 因?yàn)閖ava中的byte的toString無(wú)法實(shí)現(xiàn)這一點(diǎn),我們又沒(méi)有C語(yǔ)言中的
    //???? sprintf(outbuf,"%02X",ib)
    ??
    ??? public static String byteHEX(byte ib)
    {
    ???? char[] Digit = { '0','1','2','3','4','5','6','7','8','9',
    ????? 'A','B','C','D','E','F' };
    ???? char [] ob = new char[2];
    ???? ob[0] = Digit[(ib >>> 4) & 0X0F];
    ???? ob[1] = Digit[ib & 0X0F];
    ???? String s = new String(ob);
    ???? return s;
    }

    public static String toMD5(String source)
    {
    ??? MD5 md5 = new MD5();
    ??? return md5.getMD5ofStr(source);
    }

    public static void main(String[] args)
    {
    MD5 md5 = new MD5();
    System.out.println(md5.toMD5(args[0]));
    }
    }

    先編譯javac MD5.java,后帶字符串參數(shù)運(yùn)行,如:java MD5 abc

    //結(jié)果生成 32位的加密字符串,有的實(shí)例中截取的是加密字串的 8--24位,長(zhǎng)度為16位.

    posted @ 2007-05-28 01:41 jadmin 閱讀(62) | 評(píng)論 (0)編輯 收藏
    ???????? Java技術(shù)自問(wèn)世時(shí)光已經(jīng)過(guò)去了9個(gè)年頭。作為一名一直關(guān)注其成長(zhǎng)的記者,曾經(jīng)一段時(shí)間有過(guò)這樣的想法:“Java技術(shù)已經(jīng)成熟,是不是發(fā)展速度該放慢一些了呢”。然而,這種想法錯(cuò)了。近來(lái)Java技術(shù)的進(jìn)化相當(dāng)顯著。Java技術(shù)正在迎來(lái)“又一次革命”的風(fēng)暴。這就是本文的結(jié)論。

      “又一次”指的是什么?“革命”指的又是什么?光看結(jié)論的話肯定是一頭霧水。其實(shí),筆者要講的并不是變化這樣一個(gè)事實(shí),而是“促進(jìn)變化的原動(dòng)力”。是什么讓Java技術(shù)發(fā)生變化?讓我們從這一角度出發(fā),先看一下Java的變化歷程。

      Java正處于轉(zhuǎn)變期

      回顧Java技術(shù)的發(fā)展歷程,人們一定會(huì)感慨:2004年到2005年發(fā)生的變化如此之大,可以說(shuō)“現(xiàn)在”正是Java技術(shù)的轉(zhuǎn)換期。 Java技術(shù)由編程語(yǔ)言(Java語(yǔ)言)、運(yùn)行環(huán)境(JVM:Java虛擬機(jī))、框架(Java API群)組成,目前在每一個(gè)層面上都發(fā)生著巨大的變化。

      (1)編程語(yǔ)言的變化

      Java語(yǔ)言標(biāo)準(zhǔn)出現(xiàn)明顯變化。在2004年9月發(fā)布的正式版本J2SE5.0(J2SE:Java2 Standard, Standard Edition,Java技術(shù)的核心運(yùn)行環(huán)境)中,對(duì)Java語(yǔ)言標(biāo)準(zhǔn)中的Generics與元數(shù)據(jù)進(jìn)行了大幅擴(kuò)展。出現(xiàn)了被認(rèn)為是“自Java問(wèn)世以來(lái)的最大一次語(yǔ)言標(biāo)準(zhǔn)變化”(美國(guó)Sun Microsystems)。這次語(yǔ)言標(biāo)準(zhǔn)的變化給許多Java API帶來(lái)了影響。許多企業(yè)API的新版本都引入了基于元數(shù)據(jù)的注解(程序中記錄的附加信息),以較短的編碼記述更多的信息。

      (2)Java運(yùn)行環(huán)境的變化

      在J2SE5.0中,大幅度強(qiáng)化了JVM的管理功能與實(shí)用性,換句話說(shuō)就是具備了Java執(zhí)行OS(操作系統(tǒng))的特征。例如,原來(lái)在J2EE (Java2 Platform, Enterprise Edition,構(gòu)筑企業(yè)系統(tǒng)的Java技術(shù))領(lǐng)域,標(biāo)準(zhǔn)配備有作為管理功能的應(yīng)用軟件管理框架JMX。不僅如此,還配備有JVM自身監(jiān)控功能((JSR 174: Monitoring and Management Specification for the Java Virtual Machine)。在標(biāo)準(zhǔn)功能架構(gòu)中可以實(shí)時(shí)監(jiān)視JVM運(yùn)行時(shí)的狀態(tài),也就是內(nèi)存使用量、線程狀態(tài)等。

      J2SE5.0中新追加的功能中包括并行處理實(shí)用程序(JSR 166),其基礎(chǔ)是紐約州立大學(xué)Doug Lea提供的程序庫(kù)。也就是說(shuō),標(biāo)準(zhǔn)規(guī)格中采用了來(lái)自民間的程序庫(kù)。

      (3)框架的變化

      服務(wù)器端的Java框架也發(fā)生了巨大變化。企業(yè)級(jí)Java技術(shù)--J2EE的“使用方法”說(shuō)明文件“J2EE Blueprint”中,提出了將應(yīng)用軟件分為Web層、EJB層(Enterprise JavaBeans,將包括事務(wù)處理在內(nèi)的業(yè)務(wù)進(jìn)程模塊化的框架)來(lái)構(gòu)筑的思路。這兩種層次都迎來(lái)了架構(gòu)更替時(shí)期。Web層的新框架為JSF (JavaServer Faces,將模塊組合起來(lái)構(gòu)筑Web應(yīng)用程序的框架),EJB層為標(biāo)準(zhǔn)方案中剛剛公布的下一代EJB規(guī)格“EJB3.0”。

      值得注意的是,促成框架發(fā)生變化的正是來(lái)自民間的源碼開放軟件。

      對(duì)JSF產(chǎn)生影響的是作為源碼開放的Web層框架得到普及的Apache Struts。JSF是對(duì)Struts的思路進(jìn)行改進(jìn)的產(chǎn)物,JSF的Spec Lead(規(guī)格制定領(lǐng)袖)之一Craig R. McClanahan就是Struts的作者。

    ??????? 對(duì)EJB3.0造成影響的也是民間源碼開放軟件。EJB3.0引入了DI(Dependency Injection,依賴注入)容器類(Container)與POJO(Plain Old Java Object)持久類這些新功能,大大減輕了編程的復(fù)雜性。這些概念因PicoContainer、Spring等源碼開放軟件的導(dǎo)入而引人注目。

      其背景在于用戶對(duì)“目前的EJB過(guò)于復(fù)雜”的批評(píng)。原本由EJB反對(duì)派提出的設(shè)計(jì)思想與源碼開放軟件,卻變成了EJB3.0的中心概念,顯出了巨大的影響力。

      (4)腳本語(yǔ)言

      在Java技術(shù)標(biāo)準(zhǔn)中新增加了編程語(yǔ)言Groovy(JSR 241)。這是一種可與Java語(yǔ)言無(wú)縫連接的腳本語(yǔ)言,有望以極短的程序完成相關(guān)處理。“在Java技術(shù)中添加Java以外的語(yǔ)言”,這聽起來(lái)也許有些別扭,其實(shí)以前就有這樣的呼聲,希望將可以充分利用Java技術(shù)資源的腳本作為語(yǔ)言使用。Groovy本來(lái)是源碼開放軟件,最終得到認(rèn)可,被采納為標(biāo)準(zhǔn)規(guī)格。

      由上述可以看出,Java技術(shù)的構(gòu)成要素正在發(fā)生巨大變化。就在不久以前,一提起服務(wù)器Java,“Servlet、JSP、EJB是重要的 API”這樣的說(shuō)明還占主流,但現(xiàn)在基于JSF和EJB3.0的應(yīng)用程序已經(jīng)變成了“面目全非”的程序。而在運(yùn)行短程序或測(cè)試時(shí),甚至還出現(xiàn)了不僅是 Java語(yǔ)言,連腳本語(yǔ)言都開始調(diào)用Java框架的情況。

      這些變化從大的方面來(lái)看的話,可以說(shuō)是進(jìn)一步發(fā)揮了Java面向?qū)ο蟮膬?yōu)勢(shì)。當(dāng)然,也包括提高開發(fā)效率、提高運(yùn)行穩(wěn)定性、簡(jiǎn)化運(yùn)行管理等業(yè)務(wù)上的優(yōu)勢(shì)。

      開發(fā)者團(tuán)體是真正的“變革推動(dòng)者”

      那么,這些變化的原動(dòng)力來(lái)自哪里呢?為什么說(shuō)“目前”正面臨著“又一次變革”呢?理由如下:

      在Java技術(shù)的發(fā)展過(guò)程中,1999年到2000年是一個(gè)大的轉(zhuǎn)折點(diǎn)。J2EE概念于1999年出現(xiàn)。日本國(guó)內(nèi)的J2EE也在隨后2~3年內(nèi)得到正式普及,但這一技術(shù)體系早在5年前就已經(jīng)確立。在我們眼前,新一代Java技術(shù)的輪廓正逐漸顯現(xiàn)出來(lái)。

      JCP(Java Community Process)2.0于2000年問(wèn)世。以會(huì)員制的組織形式推進(jìn)Java技術(shù)的規(guī)格制訂、總體發(fā)展方向則以委員會(huì)的方式?jīng)Q定。從而形成了不依賴特定企業(yè)的規(guī)格制訂流程。這一組織形式歷經(jīng)近5年的時(shí)間,逐漸發(fā)展成“變革的推動(dòng)者”。

      J2EE此前一直飽受批評(píng),認(rèn)為“Web層與EJB層的差距太大”、“EJB過(guò)于復(fù)雜”,但這也是因?yàn)檫@是一項(xiàng)實(shí)際使用的技術(shù)。JCP同樣也遇到很多批評(píng),稱其“沒(méi)有完全公開”、“制定的技術(shù)標(biāo)準(zhǔn)卻不可思議地讓Sun擁有知識(shí)產(chǎn)權(quán)”,但JCP卻作為一個(gè)團(tuán)體不斷發(fā)展壯大。

      直接推動(dòng)Java技術(shù)變化的當(dāng)事者為5年前形成的基于團(tuán)體的標(biāo)準(zhǔn)制訂流程--JCP,但真正將討論與技術(shù)納入JCP的卻是包括Java技術(shù)批評(píng)者在內(nèi)的眾多Java開發(fā)者團(tuán)體。他們也是早期開展Java技術(shù)變革的先行者。由此誕生的下一代技術(shù)將會(huì)在2~3年后逐漸波及主流企業(yè)用戶。

      Java技術(shù)的“變革推動(dòng)者”為開發(fā)者團(tuán)體。不受制于特定企業(yè),通過(guò)眾多需要Java的開發(fā)者的建議,Java技術(shù)正在不斷發(fā)展進(jìn)步。
    posted @ 2007-05-28 01:30 jadmin 閱讀(42) | 評(píng)論 (0)編輯 收藏

    import java.security.*;

    public class MD5 {

    ????? /**
    ????? * 字符串加密方法。傳入一個(gè)字符串,返回經(jīng)過(guò)<b>MD5</b>加密后的一個(gè)字符串
    ????? *?? @param?? strInput
    ????? *?? @return
    ?????? */
    ????? public??? static?? String encryptMD5(String strInput) {
    ???????? StringBuffer buf=null;
    ???????? try {
    ???????????? MessageDigest md = MessageDigest.getInstance("MD5");
    ???????????? md.update(strInput.getBytes());
    ???????????? byte b[] = md.digest();
    ????????????? buf = new StringBuffer(b.length * 2);
    ???????????? for(int i=0;i<b.length;i++) {
    ???????????????? if (((int)b[i] & 0xff) < 0x10) { // & 0xff轉(zhuǎn)換無(wú)符號(hào)整型
    ???????????????????? buf.append("0");
    ???????????????? }
    ??????????????? // buf.append(Long.toString((int) b[i] & 0xff, 16));//轉(zhuǎn)換16進(jìn)制,下方法同
    ??????????????? buf.append(Long.toHexString((int)b[i] & 0xff));
    ???????????? }
    ???????? }catch(NoSuchAlgorithmException ex) {
    ????????????? ex.printStackTrace();
    ???????? }
    ??????? return buf.toString();
    ???? }

    ????? public??? static??? void?? main(String args[]) {
    ???????? String test?? =??? "abc" ;
    ???????? System.out.println(encryptMD5(test));
    ???? }
    }

    /**
    * 下面是一些測(cè)試數(shù)據(jù):
    *?? MD5 ("") = d41d8cd98f00b204e9800998ecf8427e
    *
    *?? MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661
    *
    *?? MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72
    *
    *?? MD5 ("message digest") = f96b697d7cb7938d525a2f31aaf161d0
    *
    *?? MD5 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b
    */

    posted @ 2007-05-28 01:24 jadmin 閱讀(46) | 評(píng)論 (0)編輯 收藏

    /* 主要使用的是java.util.Robot類來(lái)捕獲屏幕,
    * 可以實(shí)現(xiàn)對(duì)屏幕一個(gè)矩形區(qū)域的捕獲,通過(guò)這個(gè)類,
    * 我們也可以實(shí)現(xiàn)一個(gè)遠(yuǎn)程桌面控制的程序
    */

    package com.qiu.util;
    import java.io.*;
    import java.net.*;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.image.*;
    import javax.imageio.*;
    import java.io.*;


    public class ScreenCapture {
    //test main
    public static void main(String[] args) throws Exception{
    ?? String userdir = System.getProperty("user.dir");
    ?? File tempFile = new File("d:","temp.png");
    ?? ScreenCapture capture = ScreenCapture.getInstance();
    ?? capture.captureImage();??
    ?? JFrame frame = new JFrame();
    ?? JPanel panel = new JPanel();
    ?? panel.setLayout(new BorderLayout());
    ?? JLabel imagebox = new JLabel();
    ?? panel.add(BorderLayout.CENTER,imagebox);??
    ?? imagebox.setIcon(capture.getPickedIcon());
    ?? capture.saveToFile(tempFile);
    ?? capture.captureImage();
    ?? imagebox.setIcon(capture.getPickedIcon());
    ?? frame.setContentPane(panel);
    ?? frame.setSize(400,300);
    ?? frame.show();
    ?? System.out.println("Over");
    }

    private ScreenCapture() {
    ??
    ?? try{
    ??? robot = new Robot();
    ?? }
    ?? catch(AWTException e) {
    ??? System.err.println("Internal Error: " + e);
    ??? e.printStackTrace();
    ?? }??
    ?? JPanel cp = (JPanel)dialog.getContentPane();
    ?? cp.setLayout(new BorderLayout());??
    ?? labFullScreenImage.addMouseListener(new MouseAdapter() {
    ???? public void mouseReleased(MouseEvent evn) {
    ?????? isFirstPoint = true;
    ?????? pickedImage = fullScreenImage.getSubimage(recX,recY,recW,recH);
    ?????? dialog.setVisible(false);?????
    ???? }
    ??? });
    ???
    ?? labFullScreenImage.addMouseMotionListener(new MouseMotionAdapter() {
    ???? public void mouseDragged(MouseEvent evn) {
    ????? if(isFirstPoint) {
    ?????? x1 = evn.getX();
    ?????? y1 = evn.getY();
    ?????? isFirstPoint = false;??
    ????? }
    ????? else {
    ?????? x2 = evn.getX();
    ?????? y2 = evn.getY();
    ?????? int maxX = Math.max(x1,x2);
    ?????? int maxY = Math.max(y1,y2);
    ?????? int minX = Math.min(x1,x2);
    ?????? int minY = Math.min(y1,y2);
    ?????? recX = minX;
    ?????? recY = minY;
    ?????? recW = maxX-minX;
    ?????? recH = maxY-minY;
    ?????? labFullScreenImage.drawRectangle(recX,recY,recW,recH);????
    ????? }
    ???? }
    ????
    ???? public void mouseMoved(MouseEvent e) {
    ????? labFullScreenImage.drawCross(e.getX(),e.getY());
    ???? }
    ??? });
    ???
    ?? cp.add(BorderLayout.CENTER,labFullScreenImage);
    ?? dialog.setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
    ?? dialog.setAlwaysOnTop(true);
    ?? dialog.setMaximumSize(
    ??? Toolkit.getDefaultToolkit().getScreenSize());
    ?? dialog.setUndecorated(true);
    ?? dialog.setSize(dialog.getMaximumSize());
    ?? dialog.setModal(true);
    }
    //Singleton Pattern
    public static ScreenCapture getInstance() {
    ?? return defaultCapturer;
    }
    /**捕捉全屏慕*/
    public Icon captureFullScreen() {
    ?? fullScreenImage = robot.createScreenCapture(new Rectangle(
    ??? Toolkit.getDefaultToolkit().getScreenSize()));
    ?? ImageIcon icon = new ImageIcon(fullScreenImage);
    ?? return icon;
    }
    /**捕捉屏幕的一個(gè)矯形區(qū)域
    ?? */
    public void captureImage() {
    ?? fullScreenImage = robot.createScreenCapture(new Rectangle(
    ??? Toolkit.getDefaultToolkit().getScreenSize()));
    ?? ImageIcon icon = new ImageIcon(fullScreenImage);
    ?? labFullScreenImage.setIcon(icon);??
    ?? dialog.setVisible(true);
    }
    /**得到捕捉后的BufferedImage*/
    public BufferedImage getPickedImage() {
    ?? return pickedImage;
    }
    /**得到捕捉后的Icon*/
    public ImageIcon getPickedIcon() {
    ?? return new ImageIcon(getPickedImage());
    }
    /**儲(chǔ)存為一個(gè)文件,為PNG格式
    ??*@deprecated
    ?? *replaced by saveAsPNG(File file)
    ?? **/
    @Deprecated
    public void saveToFile(File file) throws IOException{
    ?? ImageIO.write(getPickedImage(),defaultImageFormater,file);
    }
    /**儲(chǔ)存為一個(gè)文件,為PNG格式*/
    public void saveAsPNG(File file) throws IOException {
    ?? ImageIO.write(getPickedImage(),"png",file);
    }
    /**儲(chǔ)存為一個(gè)JPEG格式圖像文件*/
    public void saveAsJPEG(File file) throws IOException {
    ?? ImageIO.write(getPickedImage(),"JPEG",file);
    }

    /**寫入一個(gè)OutputStream*/
    public void write(OutputStream out) throws IOException{
    ?? ImageIO.write(getPickedImage(),defaultImageFormater,out);
    }

    //singleton design pattern
    private static ScreenCapture defaultCapturer = new ScreenCapture();
    private int x1,y1,x2,y2;
    private int recX,recY,recH,recW; //截取的圖像
    private boolean isFirstPoint?? = true;
    private BackgroundImage labFullScreenImage = new BackgroundImage();
    private Robot robot;
    private BufferedImage fullScreenImage;
    private BufferedImage pickedImage;
    private String defaultImageFormater = "png";
    private JDialog dialog = new JDialog();
    }

    /**顯示圖片的Label*/
    class BackgroundImage extends JLabel{
    public void paintComponent(Graphics g) {
    ?? super.paintComponent(g);
    ?? g.drawRect(x,y,w,h);
    ?? String area = Integer.toString(w)+" * "+ Integer.toString(h);
    ?? g.drawString(area,x+(int)w/2-15,y+(int)h/2);
    ?? g.drawLine(lineX,0,lineX,getHeight());
    ?? g.drawLine(0,lineY,getWidth(),lineY);
    }

    public void drawRectangle(int x,int y,int width,int height) {
    ?? this.x = x;
    ?? this.y = y;
    ?? h = height;
    ?? w = width;
    ?? repaint();
    }

    public void drawCross(int x,int y) {
    ?? lineX = x;
    ?? lineY = y;
    ?? repaint();
    }

    int lineX,lineY;
    int x,y,h,w;
    }

    posted @ 2007-05-28 00:54 jadmin 閱讀(56) | 評(píng)論 (0)編輯 收藏

    import java.io.*;

    public class FileReadTest
    {
    public static void main(String[] args)
    {
    ?? FileReadTest t = new FileReadTest();
    ?? t.readMyFile();
    }
    void readMyFile()
    {
    ?? String temp = null;
    ?? int count = 0;
    ?? try
    ?? {
    ??? FileReader fr = new FileReader("mydata.txt");
    ??? BufferedReader br = new BufferedReader(fr);
    ??? temp = new String();
    ??? while((temp = br.readLine()) != null)
    ??? {
    ???? count++;
    ???? System.out.println(count + ":" + temp);
    ??? }
    ??? br.close();
    ??? fr.close();
    ?? }
    ?? catch(IOException e)
    ?? {
    ??? System.out.println("OH,got an IOException error!");
    ??? e.printStackTrace();
    ?? }
    }
    }

    posted @ 2007-05-28 00:32 jadmin 閱讀(48) | 評(píng)論 (0)編輯 收藏

    import java.io.*;

    public class FileInputDemo
    {
    public static void main(String[] args)
    {
    ?? try
    ?? {
    ??? FileInputStream f = new FileInputStream("mydata.txt");
    ??? DataInputStream in = new DataInputStream(f);
    ??? //BufferedReader br = new BufferedReader(new InputStreamReader(f));
    ??? while(in.available() != 0)
    ???? System.out.println(in.readLine());
    ???? /**
    ????? * DataInputStream.readLine()已經(jīng)過(guò)時(shí)
    ????? * 使用 DataInputStream 類讀取文本行的程序可以改為使用BufferedReader類
    ????? * 改用BufferedReader.readLine()方法
    ????? * 只要將以下形式的代碼:DataInputStream d = new DataInputStream(in);
    ????? * 替換為:BufferedReader d = new BufferedReader(new InputStreamReader(in));
    ????? */
    ??? in.close();
    ?? }
    ?? catch(Exception e)
    ?? {
    ??? System.err.println("File input error!");
    ?? }
    }
    }

    posted @ 2007-05-28 00:29 jadmin 閱讀(87) | 評(píng)論 (0)編輯 收藏


    import java.io.*;

    public class FileWriterTest
    {
    public static void main(String[] args)
    {
    ?? FileWriterTest t = new FileWriterTest();
    ?? t.WriteMyFile();
    }

    void WriteMyFile()
    {
    ?? try
    ?? {
    ??? FileWriter fw = new FileWriter("mydata.txt");
    ??? PrintWriter out =new PrintWriter(fw);
    ??? out.print("Hello,World!");
    ??? out.close();
    ??? fw.close();
    ?? }
    ?? catch(IOException e)
    ?? {
    ??? System.out.println("OH,got an IOException error!");
    ??? e.printStackTrace();
    ?? }
    }
    }

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

    1


    //用FileOutputStream將內(nèi)容寫入文本文件

    import java.io.*;
    public class FileOutputDemo
    {
    public static void main(String[] args)
    {
    ?? FileOutputStream out;
    ?? PrintStream p;
    ?? try
    ?? {
    ??? out = new FileOutputStream("myfile.txt");
    ??? p = new PrintStream(out);
    ??? p.println("Hello,World!");
    ??? p.close();
    ?? }
    ?? catch(Exception e)
    ?? {
    ??? System.err.println("Error writing to file!");
    ?? }
    }

    }

    2

    import java.io.*;

    class FSODemo
    {
    ?? public static void main(String args[]) throws Exception
    ?? {
    ???? String source="Beijing is the capital of China\n"
    ???? +"and it is a very beautiful city.\n"
    ???? +"Welcome to Beijing!";
    ???? byte buf[] = source.getBytes();
    ???? FileOutputStream f=new FileOutputStream("file.txt");
    ???? f.write(buf);
    ???? f.close();
    ???? System.out.println("文本已經(jīng)成功寫入文件!");
    ?? }
    }

    posted @ 2007-05-28 00:27 jadmin 閱讀(355) | 評(píng)論 (0)編輯 收藏
    僅列出標(biāo)題
    共50頁(yè): First 上一頁(yè) 39 40 41 42 43 44 45 46 47 下一頁(yè) Last 
    主站蜘蛛池模板: 亚洲六月丁香婷婷综合| 国产精品另类激情久久久免费| a在线观看免费视频| 一二三区免费视频| 性生大片视频免费观看一级| 看一级毛片免费观看视频| 亚洲AV无码男人的天堂| 精品国产日韩亚洲一区在线| 亚洲成AV人片在WWW| 小说专区亚洲春色校园| 免费人成大片在线观看播放电影| 黄色三级三级三级免费看| 免费一级特黄特色大片| 久久性生大片免费观看性| 成全视成人免费观看在线看| 免费黄色电影在线观看| 999任你躁在线精品免费不卡| 每天更新的免费av片在线观看| 亚洲日本在线免费观看| 女人被免费视频网站| 免费a级毛片永久免费| 亚洲香蕉网久久综合影视| 亚洲av无码潮喷在线观看| 亚洲精品高清国产麻豆专区| 亚洲依依成人精品| 亚洲AV永久无码精品放毛片| 人成电影网在线观看免费| 成在人线av无码免费高潮喷水| 99久久99久久免费精品小说| 无码少妇一区二区浪潮免费| 国产大片91精品免费观看男同| 亚洲一区无码精品色| 久久亚洲精品中文字幕无码| 亚洲欧洲日韩极速播放| 国产成人综合亚洲| 大地资源网高清在线观看免费| 无遮免费网站在线入口| 国产在线a不卡免费视频| 亚洲精品乱码久久久久久中文字幕 | 亚洲中文字幕无码中文| 黄色a级免费网站|