2016-04-25 15 views
-3

cmdラインを使用してJavaアプリケーションにいくつかのディレクトリを渡そうとしています。コマンドライン経由でJavaアプリケーションにディレクトリを渡す際に問題が発生する

これらの2つのディレクトリ以下のとおりです。

\ ############## \バリュエーション\生産\ CMRM-VC-FI \ Bondzilla-スナップ\ 2016年4月 \#\ ######## \ Home \ A ####### \ Desktop \ autorbtest.csv (私はディレクトリの一部を黒く塗りつぶしました)

最初のディレクトリの最後、javaは最初のディレクトリを2つの別個のargsとして解釈します。私は、ディレクトリ( ")の周りに二重引用符を置くことを試みてきたが、Javaはまだ個別の引数としてスペースを解釈します。

私はそれがディレクトリの先頭に二重のバックスラッシュとは何かを持っていることを考えています。

すべてのヘルプは素晴らしいことだ。おかげで、私は上記の入力に基づいて、推測してい

+0

入力を解析しているコードを表示して、引数がメイン関数に渡されていることを確認してください。 – karina

+0

javaのmain関数はstring [] argsという1つの引数を受け取ります。 javaは引数を配列にロードしますが、入力を解析しません。 javaが引数を解釈する方法は、単にスペースを使用することです。私のコードをここに表示すると、ここではあまり関係ないと思う。 – user3626038

+0

もちろん、それは多くの関連性があるだろう。ディレクトリ構造ではなく、ここでコードを見直します。誰もコードなしであなたを助けることはできません。 – f1sh

答えて

0

、その実際にOPがパラメータを受け取ったことを、バックスラッシュで終わるスペースとパス、周りの引用符を使用した場合スペースでパスを引用すると動作しますが、最終パスがバックスラッシュで終わっていないとしません。Windowsは永遠に呪われているかもしれません。パス区切り記号としてバックスラッシュを使用します。

パス############## \バリュエーション\生産\ CMRM-VC-FI \ Bondzilla-スナップ\ 2016年4月\を指定するには、

java WHAT_EVER_ARGS CLASSNAME "\##############\Valuations\Production\CMRM-VC-FI\Bondzilla-Snaps\April 2016\\" "other file" 
を行う必要があります

あなたはmain方法で追加することができますチェックとして:

int i = 0; 
    for (String arg : args) { 
     System.out.printf("[%d]: %s%n", i++, arg); 
    } 

あなたは期待される引数の数が表示されるはずです。末尾のバックスラッシュを2倍にしないと、1つの出力のみが表示されます。

例のパラメータがあるとき:"\somePath\Has a Space\At end\" "\someother\Path\Here"

[0]:\ somePath \は\「終わりに他の何らかの\のパスをスペース\を持っています\ここ

例のパラメータは次のとおりです。"\somePath\Has a Space\At end\\" "\someother\Path\Here"

[0]:\ somePath \は
[1] \終わりにスペース\を持っている:\ここで\他の何らかの\パス

+0

でも可能です。\ ########### \ Valuations \ Production \ CMRM-VC-FI \ Bondzilla-Snaps \ "April 2016" \ – karina

+0

@karina複数のセグメントを引用する必要がある可能性があるため、複数のセグメントにスペースがある場合は、より複雑になります。私は個人的には後にスラッシュを付ける必要はないと信じていますが、それは別の話です。 – KevinO

+0

私はまた後続のスラッシュを必要としないことに同意しますが、私は最大の懸念は、これは技術的にユーザーの入力であるということです。 – karina

関連する問題