說說Java的args,大家可能沒有注意到的現象

來源:互聯網
上載者:User
 【問題起源】

         我最近要做一個Class加密程式, 用自己的classload來裝載encryptclass, 好, 我必須提供一個工具來給程式員,

用於加密class,作為一個好的Exe程式, 我希望可以通過命令列加密class

譬如:Encryption -encrypt  class1.class class2.class

問題來了, 我是否應該做成檔案萬用字元的方式?

譬如: Encryption -encrypt  c?*k?.class

【解決辦法】

         好在有google, 我搜尋“FilenameFilter wildcard character”, 發現有一個appach組織在做一個oro的項目, 裡面有

我要的東西:

org.appache.oro.io.GlobFilenameFilter這個可以用, 然而在測試的時候發現java的讀取arg的方式很讓我吃驚

import java.io.File;
import org.apache.oro.io.GlobFilenameFilter;

public class Test {

        public static void main( String[] args ) {

                // Create a filter
                GlobFilenameFilter filter = new GlobFilenameFilter( args[0]);

                // Find all the files in the folder matching that filter
                File cwd = new File( "." );
                String[] filesFound = cwd.list( filter );

                // And print them out
                System.out.println( "Found " + filesFound.length + "files");
                for( int i = 0; i < filesFound.length; i ++ ) {
                        System.out.println(" Found file " + filesFound[i] );
                }
        }
}
大家可以將這個檔案放在自己的IDE裡面運行, 並在工作目錄裡面建3個txt檔案:1.txt 2.txt 3.txt

運行:java Test *.txt(jdk 1.4.0)

結果如何?

這個程式列印結果是:

found 1 file

found file 1.txt

【為什麼】

        為了瞭解原因, 我在main函數加入一句:

System.out.println("arg[0]="+arg[0]);

結果是:

      arg[0]=1.txt

這就說明了, java在調用參數的時候已經進行萬用字元的處理,在這個例子中:

java Test *.txt

java Test 1.txt 2.txt 3.txt是等同的

不信, 你可以讓他做迴圈列印:

for(int j=0; j

   System.out.println("arg["+j+"]="+arg[j]);

}

結果一樣讓你吃驚

【結論】

        實事求是和實驗是檢驗真理的辦法, 不要想當然。

【相關連結】

一個老外和我一樣困惑:這裡查看

ORO項目

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.