熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Javascript >> 正文

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

2013-11-23 17:57:59  來源: Javascript 

  【問題起源】
  我最近要做一個Class加密程序 用自己的classload來裝載encryptclass 我必須提供一個工具來給程序員
  
  用於加密class作為一個好的Exe程序 我希望可以通過命令行加密class
  
  譬如Encryption encrypt classclass classclass
  
  問題來了 我是否應該做成文件通配符的方式?
  
  譬如 Encryption encrypt c?*k?class
  
  【解決辦法】
  好在有google 我搜索FilenameFilter wildcard character 發現有一個appach組織在做一個oro的項目 裡面有
  
  我要的東西
  
  orgappacheoroioGlobFilenameFilter這個可以用 然而在測試的時候發現java的讀取arg的方式很讓我吃驚
  
  import javaioFile;
  import orgapacheoroioGlobFilenameFilter;
  
  public class Test {
  
  public static void main( String[] args ) {
  
  // Create a filter
  GlobFilenameFilter filter = new GlobFilenameFilter( args[]);
  
  // Find all the files in the folder matching that filter
  File cwd = new File( );
  String[] filesFound = cwdlist( filter );
  
  // And print them out
  Systemoutprintln( Found + filesFoundlength + files);
  for( int i = ; i < filesFoundlength; i ++ ) {
  Systemoutprintln( Found file + filesFound[i] );
  }
  }
  }
  大家可以將這個文件放在自己的IDE裡面運行 並在工作目錄裡面建個txt文件txt txt txt
  
  運行java Test *txt(jdk
  
  結果如何?
  
  這個程序打印結果是
  
  found file
  
  found file txt
  
  【為什麼】
  為了了解原因 我在main函數加入一句
  
  Systemoutprintln(arg[]=+arg[]);
  
  結果是
  
  arg[]=txt
  
  這就說明了 java在調用參數的時候已經進行通配符的處理在這個例子中
  
  java Test *txt
  
  和
  
  java Test txt txt txt是等同的
  
  不信 你可以讓他做循環打印
  
  for(int j=; j
  
  Systemoutprintln(arg[+j+]=+arg[j]);
  
  }
  
  結果一樣讓你吃驚
  
  【結論】
  實事求是和試驗是檢驗真理的辦法 不要想當然
From:http://tw.wingwit.com/Article/program/Java/Javascript/201311/25450.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.