I’m using the Apache Commons 1.4.1 library to compress and uncompress ".tar.gz" files.
I’m having trouble with the last bit — converting a TarArchiveInputStream into a FileOutputStream.
Oddly enough, it’s breaking on this line:
FileOutputStream fout = new FileOutputStream(destPath);
destPath is a File with a Canonical path of: C:\Documents and Settings\Administrator\My Documents\JavaWorkspace\BackupUtility\untarred\Test\subdir\testinsub.txt
Error produced:
Exception in thread "main" java.io.IOException: The system cannot find the path specified
Any idea what it could be? And why is it not able to find the path?
I’m attaching the whole method below (most of which is lifted from here).
private void untar(File dest) throws IOException {
dest.mkdir();
TarArchiveEntry tarEntry = tarIn.getNextTarEntry();
// tarIn is a TarArchiveInputStream
while (tarEntry != null) {// create a file with the same name as the tarEntry
File destPath = new File(dest.toString() + System.getProperty("file.separator") + tarEntry.getName());
System.out.println("working: " + destPath.getCanonicalPath());
if (tarEntry.isDirectory()) {
destPath.mkdirs();
} else {
destPath.createNewFile();
FileOutputStream fout = new FileOutputStream(destPath);
tarIn.read(new byte[(int) tarEntry.getSize()]);
fout.close();
}
tarEntry = tarIn.getNextTarEntry();
}
tarIn.close();
}
A couple of general points, why do you do voodoo with the
Fileconstructor, where there is a perfectly usable constructor where you can define the name of theFileyou want to create and give a parent File?Secondly I am not too sure how empty spaces are handled in paths in windows. It might be the cause of your problems. Try using the constructor I mentioned above and see if it makes a difference:
File destPath = new File(dest, tarEntry.getName());(assuming thatFile destis a proper file, and exists and is accessible by you.Third, before you do anything with a
Fileobject you should check if it exists and if it is accessible. That will ultimately help you pinpoint the problem.