English 中文(简体)
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+" 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).





相关问题
Spring Properties File

Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...

Logging a global ID in multiple components

I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...

Java Library Size

If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...

How to get the Array Class for a given Class in Java?

I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....

SQLite , Derby vs file system

I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...

热门标签