2011-10-19 5 views
0

私は、コマンドラインから入力としてパスを取る必要があります。?、*、**などのワイルドカードを使用する可能性があります。 Javaは、これらのパスを自分自身で拡張し続けます。例えばjavaがパスワイルドカードを処理しないようにする

java -jar myapp.jar C:/Hello/World/* 

が私にこのようになります。String []型引数与える:

["C:\Hello\World\foo", "C:\Hello\World\bar"] 

だけでなく、これは非常に面倒である、それはまた、**ワイルドカードを台無しに

java -jar myapp.jar C:/Hello/World/** 

**は再帰的検索でなければならない前と同じことを与えます。これを効率的に行うためのアルゴリズムがあります。これはもともとPythonで開発したものですが、使用できなければ意味がありません。これが起こらないようにする方法はありますか?

EDIT =別の形式(引用符、引用符、二重引用符は不要)を使用していて、いずれも機能していない別のシェル(PowerShell、cmd、eclipse)を使用しようとしました。

答えて

0

これは完全に間違っているが、これを試みることができる:

java -jar myapp.jar C:/Hello/World/\*

+0

それが働いていたとしても(それはない)、それはユーザーフレンドリーではないでしょう。 – elite5472

5

Javaが、それはあなたのシェルだ、ということやっていません。

は、引数を引用:

java -jar myapp.jar 'C:/Hello/World/**' 

それとも

java -jar myapp.jar "C:/Hello/World/**" 
+0

二重引用符を使用して同じことが(私はそれを試みた)しました。一重引用符を使用すると、引用符も文字列に入ります。私は少なくともそれを回避することができます、私は推測します。 – elite5472

+0

はい。実際、私はPowershellとEclipseの両方で試しています。 Eclipseは引用符を無視し、すべてを入れるだけです.Powershellは引用符を認識し、次に二重引用符と同じものが認識されます。 – elite5472

+0

ワイルドカード展開は、Windowsのシェルでは実行されません。アプリケーションによって実行されます。 (実際には、シェルはコマンドライン引数をWindows上で分割することさえしません。シェルはアプリケーションにコマンドライン全体を渡すだけですが、libcは通常、それをargv配列に分割します)。 JVMがアプリケーションのパターン拡張を実行してUNIXのような動作をシミュレートしようとしていることを示します。 –

関連する問題