3

ファイルを圧縮する必要のあるプログラムを書いています。これは、LinuxマシンとWindowsマシンの両方で実行されます。Linuxでは問題なく動作しますが、Windowsでは何もできません。コマンドを送信するには、apache-netプロジェクトを使用しています。Runtime()。execも使用してみましたが、機能しません。誰かが何かを提案できますか?

CommandLine cmdLine = new CommandLine("zip");
     cmdLine.addArgument("-r");
     cmdLine.addArgument("documents.zip");
     cmdLine.addArgument("documents");
     DefaultExecutor exec = new DefaultExecutor();
     ExecuteWatchdog dog = new ExecuteWatchdog(60*1000);
     exec.setWorkingDirectory(new File("."));
     exec.setWatchdog(dog);
    int check =-1;
    try {
        check = exec.execute(cmdLine);
    } catch (ExecuteException e) {

    } catch (IOException e) {
    }
4

3 に答える 3

6

Javaは、.zip形式をサポートする独自の圧縮ライブラリをjava.util.zip。*で提供します。フォルダを圧縮する例はここにあります。これは、単一のファイルで機能する簡単な例です。ネイティブJavaを使用する利点は、複数のオペレーティングシステムで動作し、特定のバイナリがインストールされていることに依存しないことです。

  public static void zip(String origFileName) {
    try {
      String zipName=origFileName + ".zip";
      ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipName)));
      byte[] data = new byte[1000]; 
      BufferedInputStream in = new BufferedInputStream(new FileInputStream(origFileName));
      int count;
      out.putNextEntry(new ZipEntry(origFileName));
      while((count = in.read(data,0,1000)) != -1) {  
        out.write(data, 0, count);
      }
      in.close();
      out.flush();
      out.close();
    } catch (Exception ex) {
      ex.printStackTrace();
    }
  }
于 2012-05-04T03:12:20.197 に答える
3

同じコードはWindowsでは機能しません。Windowsには、Linuxのような「zip」プログラムはありません。Windows 7にコマンドラインzipプログラムがあるかどうかを確認する必要があります(私はそうは思いません。ここを参照してください:http://answers.microsoft.com/en-us/windows/forum/windows_vista-files/how- to-compress-a-folder-from-command-prompt / 02f93b08-bebc-4c9d-b2bb-907a2184c8d5)。あなたはおそらく2つのことをする必要があるでしょう

  1. ユーザーが適切なサードパーティのzipプログラムを使用していることを確認してください
  2. OS検出を行い、適切なコマンドを実行します。
于 2012-05-04T02:26:39.693 に答える
0

組み込みのcompact.exeを使用して、DOSで圧縮/解凍できます

NTFSパーティション上のファイルの圧縮を表示または変更します。

コンパクト[/C| / U] [/ S [:dir]] [/ A] [/ I] [/ F] [/Q][ファイル名[...]]

/C指定されたファイルを圧縮します。ディレクトリは、後で追加されるファイルが圧縮されるようにマークされます。

/U指定されたファイルを解凍します。後で追加されたファイルが圧縮されないように、ディレクトリにマークが付けられます。

/S指定されたディレクトリおよびすべてのサブディレクトリ内のファイルに対して指定された操作を実行します。デフォルトの「dir」は現在のディレクトリです。

/A非表示またはシステム属性を持つファイルを表示します。これらのファイルはデフォルトで省略されています。

/ Iエラーが発生した後も、指定された操作を続行します。デフォルトでは、COMPACTはエラーが発生すると停止します。

/ Fすでに圧縮されているファイルも含め、指定されたすべてのファイルに対して圧縮操作を強制します。すでに圧縮されているファイルはデフォルトでスキップされます。

/Q最も重要な情報のみを報告します。

filenameパターン、ファイル、またはディレクトリを指定します。

パラメータなしで使用すると、COMPACTは、現在のディレクトリとそれに含まれるすべてのファイルの圧縮状態を表示します。複数のファイル名とワイルドカードを使用できます。複数のパラメータの間にスペースを入れる必要があります。


コンパクト

現在のディレクトリ内のすべてのファイルとそれらのコンパクトステータスを表示します。

コンパクトfile.txt

ファイルfile.txtのコンパクトステータスを表示します

コンパクトfile.txt/C

file.txtファイルを圧縮します。

于 2012-05-04T02:59:53.843 に答える