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)。您可能需要做两件事

  1. 确保用户有合适的第 3 方 zip 程序
  2. 进行操作系统检测以执行正确的命令。
于 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 只报告最重要的信息。

文件名 指定模式、文件或目录。

不带参数使用时,COMPACT 显示当前目录及其包含的任何文件的压缩状态。您可以使用多个文件名和通配符。您必须在多个参数之间放置空格。


例子

袖珍的

显示当前目录下的所有文件及其压缩状态。

压缩文件.txt

显示文件 file.txt 的压缩状态

压缩文件.txt /C

压缩 file.txt 文件。

于 2012-05-04T02:59:53.843 回答