开发者

Compressing and Archiving the files in the folder using Java Runtime

I am trying to Compress and Archive all the files in a folder, using Java Runtime class. My code snippet looks as this :

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+"开发者_StackOverflow marketData*";
    File f = new File("/home/amit/Documents/");
    Process pr = rt.exec(command, null, f);
    System.out.println("Exit value: "+pr.exitValue());
}

The above code doesn't archive and compress the file as expected, though it creates a file myuserData2009-11-18.tar.bz2 in the folder "/home/amit/Documents/".

Also the output is

Exit value: 2.   

While if I execute the same command from command line, it gives the expected result.

Please tell me what I am missing.

Thanks

Amit


The problem lies in this part:

" marketData*"

you expect the filenames to be compressed to be globbed from the * wildcard. Globbing is done by the shell, not by the tools themselves. your choices are to either:

  • numerate the files to be archived yourself
  • start the shell to perform the command ("/bin/sh -c")
  • start tar on the folder containing the files to be archived

Edit: For the shell option, your command would look like:

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

(mind the \"s that delimit the command to be executed by the shell, don't use single quotes ot the shell won't interpret the glob.)


If really you want to create a bzip2 archive, I'd use a Java implementation instead of a native command which is good for portability, for example the one available at http://www.kohsuke.org/bzip2/ (it is not really optimized though, compression seems to be slower than with Java LZMA).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜