0

7zipを使用してzipファイルを展開しようとしていますが、7zipの使用法のプリントアウトが表示され続けます。

zipはc:\tempにあります

同じコマンドがバッチウィンドウで成功します:

C:\TEMP>7z x "tryThis.zip"

私はファイルにworkdirパスを追加しようとしましたが、作業dirがなければ、何の助けにもなりません。-おそらくCMD/cコマンドを使用してこれを実行できますが、コードをクリーンに保つことを好みます

私は何が間違っているのですか?

ありがとうございました!

String  pathTo7ZipExe = "c:\\program files\\7-zip\\7z.exe";
String fileName ="tryThis.zip";
String workingDir = "c:\\temp\\";

Process process = Runtime.getRuntime().exec(
                                     new String[]{pathTo7ZipExe},
                                     new String[]{" x \"" + fileName +"\""},
                                     new File(workingDir)); 

BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));  
String line;  
while ((line = in.readLine()) != null) {  
      System.out.println(line);  
}  
// wait for zip to end.
int exitVal = process.waitFor();  
4

2 に答える 2

6

Runtime.execのドキュメントをご覧ください

実際にやろうとしていたのは、引数なしで7-zipを呼び出し、環境として引数を提供することです。環境はWindowsPATHなどのようなものです。

したがって、おそらく次のようなことをしたいと思うでしょう。

Runtime.getRuntime().exec(new String[]{pathToZipExe, "x", fileName}, null, new File(workingDir));

一方、Javaに含まれているZipInputStreamを確認することを強くお勧めします。これを使用すると、zipファイルを解凍することもできます。

乾杯

于 2013-02-15T22:06:56.237 に答える
1

2番目の引数として配列execを受け入れるオーバーロードを呼び出しています。envpこのenvp配列は引数用ではないため、実際には引数を渡さないでください。これが、使用法の印刷出力を取得する理由です。

引用符とスペースは、それ自体が引数の一部ではありません。これらは、に分離するために使用されますargv(マイナーな予約があれば、Windowsにも当てはまりますCommandLineToArgW。引用符とスペースを含む完全な元のコマンドラインは常に使用可能ですが、このように機能します)。

したがって、次のようになります。

Runtime.getRuntime().exec(new String[]{pathTo7ZipExe, "x", fileName},
                  new String[]{}, new File(workingDir));

(残念ながら、私はJavaを知らないので、コードは一義的かもしれませんが、機能するはずです)。

于 2013-02-15T22:08:53.600 に答える