You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@commons.apache.org by Alexandre Sieira <al...@gmail.com> on 2014/03/13 01:17:40 UTC

[vfs] opening gzip files inside a tar

I have received a tar file (/Users/user1/Downloads/tmp/archive.tar) that contains several .gz files within it, and was trying to read one of them (dir1/dir2/file.gz). 

To preempt possible complaints: I know this is weird and the opposite of the usual .tar.gz format. But this is a huge file I will get regularly from a third party and don’t have a whole lot of control over it, so bear with me here.

This is what my code looks like: 

FileObject file = VFS.getManager().resolveFile(“gz:tar:file:///Users/user1/Downloads/tmp/archive.tar!/dir1/dir2/file.gz”);

However, this gives me the following error:

Exception in thread "main" org.apache.commons.vfs2.FileSystemException: Could not resolve file "gz:tar:file:///Users/user1/Downloads/tmp/archive.tar!/!/".
	at org.apache.commons.vfs2.provider.AbstractFileSystem.resolveFile(AbstractFileSystem.java:348)
	at org.apache.commons.vfs2.provider.AbstractFileSystem.resolveFile(AbstractFileSystem.java:317)
	at org.apache.commons.vfs2.provider.AbstractFileSystem.getRoot(AbstractFileSystem.java:286)
	at org.apache.commons.vfs2.provider.AbstractLayeredFileProvider.createFileSystem(AbstractLayeredFileProvider.java:92)
	at org.apache.commons.vfs2.provider.AbstractLayeredFileProvider.findFile(AbstractLayeredFileProvider.java:63)
	at org.apache.commons.vfs2.impl.DefaultFileSystemManager.resolveFile(DefaultFileSystemManager.java:693)
	at org.apache.commons.vfs2.impl.DefaultFileSystemManager.resolveFile(DefaultFileSystemManager.java:649)
	at org.apache.commons.vfs2.impl.DefaultFileSystemManager.resolveFile(DefaultFileSystemManager.java:605)
	at <redacted>.main(<redacted>.java:148)
Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: -1
	at java.lang.String.substring(String.java:1911)
	at org.apache.commons.vfs2.provider.compressed.CompressedFileFileObject.<init>(CompressedFileFileObject.java:45)
	at org.apache.commons.vfs2.provider.gzip.GzipFileObject.<init>(GzipFileObject.java:38)
	at org.apache.commons.vfs2.provider.gzip.GzipFileSystem.createFile(GzipFileSystem.java:44)
	at org.apache.commons.vfs2.provider.AbstractFileSystem.resolveFile(AbstractFileSystem.java:344)
	... 8 more

Am I doing something wrong here? Sorry if this is a rookie mistake, I have just now started using VFS.

-- 
Alexandre Sieira
CISA, CISSP, ISO 27001 Lead Auditor

"The truth is rarely pure and never simple."
Oscar Wilde, The Importance of Being Earnest, 1895, Act I