0

我正在尝试使用 Java Runtime 类压缩和存档文件夹中的所有文件。我的代码片段如下所示:

public static void compressFileRuntime() throws IOException, InterruptedException {

    String date = Util.getDateAsString("yyyy-MM-dd");
    Runtime rt = Runtime.getRuntime();
    String archivedFile = "myuserData"+date+".tar.bz2";
    String command = "tar --remove-files -cjvf "+archivedFile+" marketData*";
    File f = new File("/home/amit/Documents/");
    Process pr = rt.exec(command, null, f);
    System.out.println("Exit value: "+pr.exitValue());
}

上面的代码没有按预期归档和压缩文件,尽管它myuserData2009-11-18.tar.bz2在文件夹“ /home/amit/Documents/”中创建了一个文件。

输出也是

Exit value: 2.   

如果我从命令行执行相同的命令,它会给出预期的结果。

请告诉我我错过了什么。

谢谢阿米特
_

4

2 回答 2

2

问题出在这部分:

" marketData*"

您希望压缩文件名以从*通配符中获取。通配是由 shell 完成的,而不是由工具本身完成的。您的选择是:

  • 自己计算要归档的文件
  • 启动 shell 以执行命令 ("/bin/sh -c")
  • 在包含要归档的文件的文件夹上启动 tar

编辑:对于 shell 选项,您的命令如下所示:

String command = "sh -c \"tar --remove-files -cjvf "+archivedFile+" marketData*\"";

(注意\"分隔shell要执行的命令的s,不要使用单引号,否则shell不会解释glob。)

于 2009-11-18T11:02:04.723 回答
1

如果你真的想创建一个 bzip2 存档,我会使用 Java 实现而不是有利于可移植性的本机命令,例如http://www.kohsuke.org/bzip2/上提供的命令(它不是虽然确实优化了,但压缩似乎比 Java LZMA 慢)。

于 2009-11-18T11:08:52.927 回答