2012-01-11 45 views
6

我寫了這個類:的Java參數*奇怪的現象

public class ListArg { 
    public static void main(String args[]) 
    { 
     for(int i=0;i<args.length;i++) 
     { 
      System.out.println(args[i]); 
     } 
    } 
} 

的javac ListArg.java //編譯後的class

我上面的類編譯和運行,如: 的Java ListArg *

但ListArg在控制檯上顯示當前目錄內容而不是「*」。

回答

4

編輯:看來我錯了,這可能是Java的做它畢竟。如果你使用的是Unix shell,這可能只是執行「globbing」的shell。但是,它似乎在Windows上執行相同的操作,這讓我很驚訝(因爲Windows命令行默認情況下不會執行通配符)。

不幸的是,在Windows正常的報價出現,給你一個報價的說法,即如果打印args[0]有運行

java ListArg '*' 

包括單引號。我正在研究是否有禁用這種方法...雖然這可以在Unix shell上運行。

編輯:嗯......至今沒有運氣在管理擁有的只是一個明星在Windows :(

2

你應該換行*引號: java ListArg '*'java ListArg "*"

1

這是你的shell的字符串(除非你是在Windows上)擴大*嘗試逃脫它通過把它放在引號如「*」

對於我在Windows XP上使用雙引號的作品,「*」作爲參數給出了java程序*作爲參數(沒有雙引號和不擴展)。不同的其他Window版本。

+0

它可能 - 它可能不是。在Windows上,這由Java.exe完成... – 2012-01-11 11:31:32

+0

感謝Jon,編輯了我的答案。 – 2012-01-11 11:52:32

+0

不幸的是'\ *'在Windows上列出了根目錄下的所有文件:( – 2012-01-11 11:54:34

1

你給在雙引號中的命令行參數和檢查。

+0

。但是如果你用單引號引用,單引號也會被打印.ex:如果你給java ListArg'john',它會給你'john'作爲輸出 – johnkrishna 2012-01-11 11:38:38

0

*是由終端

類似*預處理wildcard字符,你可以使用

  • *.*
  • *.txt。這將列出文件和文件夾的.txt作爲結束

和等,你可以嘗試

link提供這些信息。

它不僅在Linux下工作,而且在Windows中。