【问题标题】:zip folder in windows using command line使用命令行在Windows中的zip文件夹
【发布时间】:2012-05-13 12:48:09
【问题描述】:

我正在编写一个需要压缩文件的程序。 这将在 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) {
    }

【问题讨论】:

  • 我们可以看看你的代码吗
  • 您在 Windows 中使用的是什么 zip 程序?
  • 当您发布代码时,请同时发布任何错误消息。

标签: java windows command


【解决方案1】:

Java 在支持 .zip 格式的 java.util.zip.* 中提供了自己的压缩库。可以找到压缩文件夹的示例here。这是一个适用于单个文件的快速示例。使用本机 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();
    }
  }

【讨论】:

  • 您可能希望使用origFileName 作为ZipEntry 的参数,而不是zipName
【解决方案2】:

相同的代码在 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. 进行操作系统检测以执行正确的命令。

【讨论】:

    【解决方案3】:

    您可以使用内置的compact.exe在dos中进行压缩/解压缩

    它显示或更改 NTFS 分区上文件的压缩。

    紧凑 [/C | /U] [/S[:dir]] [/A] [/I] [/F] [/Q] [文件名[...]]

    /C 压缩指定的文件。将标记目录,以便压缩之后添加的文件。

    /U 解压缩指定的文件。目录将被标记,以便之后添加的文件不会被压缩。

    /S 对给定目录和所有子目录中的文件执行指定的操作。默认“dir”是当前目录。

    /A 显示具有隐藏或系统属性的文件。这些文件默认被省略。

    /I 即使在发生错误后也继续执行指定的操作。默认情况下,COMPACT 在遇到错误时停止。

    /F 强制对所有指定文件执行压缩操作,即使是那些已经压缩的文件。默认跳过已压缩的文件。

    /Q 只报告最重要的信息。

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

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


    例子

    紧凑

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

    压缩文件.txt

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

    压缩文件.txt /C

    压缩 file.txt 文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-15
      • 1970-01-01
      • 2021-04-24
      • 2021-11-15
      • 1970-01-01
      相关资源
      最近更新 更多