2012-01-11 14 views
6

私はこのクラスを書いた:奇妙な行動*

* ListArg の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 //コンパイルされたクラス

ListArgは現在のディレクトリの内容を "*"ではなくコンソールに表示しています。

答えて

4

編集:私が間違っていたように見え、これはJavaは、すべての後にそれをやっている可能性があります。あなたがUnixシェルを使っているなら、これはたぶんシェルが "globbing"を実行しているだけでしょう。しかし、Windowsで同じことをしているように見えますが、Windowsのコマンドラインはデフォルトではグロブを実行しないため、驚いています。残念ながら、Windows上で引用通常はあなたに引用された引数を与えるように見える

、すなわち、あなたが実行

java ListArg '*' 

を持つargs[0]を印刷する場合、それはは、単一引用符が含まれます。私は、これを無効にする方法があるかどうかを調べています...それはUnixシェルで動作しますが。

EDIT:うーん...運は、これまでのWindows :(これは

2

あなたが引用符で*ラップする必要があります。 java ListArg '*'またはjava ListArg "*"

1

シェルでだけ星の文字列(Windowsである場合を除く)に拡大*を持って管理する上でエスケープしてみません"*"のような引用符で囲んでください。

Windows XPの場合、二重引用符を使用して私の場合、引数として "*"は引数としてJavaプログラム*を与えます(二重引用符も展開もしません)。

+0

可能性があります。 WindowsではこれはJava.exeによって行われます... –

+0

ありがとうございましたジョン、私の答えを少し編集しました。 –

+0

残念ながら、Windows上の '\ *'は、ルートディレクトリのすべてのファイルをリストしています:( –

1

コマンドライン引数を二重引用符で囲み、チェックします。

+0

でもwindowsで二重引用符を使わなくても動作します。しかし、一重引用符で囲んだ場合、一重引用符もprint.exになります:java ListArg 'john'を与える​​と、出力として 'john' – johnkrishna

0

*は、端末

*と同様に

によって前処理されwildcardキャラクターである、あなたは

  • *.*
  • *.txt .Thisが
エンドとして.TXTを持つファイルやフォルダを一覧表示されます使用することができます

などとお試しください。

このlinkは、これらの情報を提供します。

これはLinuxだけでなく、Windowsでも動作します。