blob: 9970b0b72630a217af633c24d05250e96fcf192e (
plain) (
tree)
|
|
package org.openslx.util;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream;
public class TarArchiveUtil
{
private TarArchiveUtil()
{
}
public static class TarArchiveReader implements AutoCloseable
{
private final TarArchiveInputStream tarInputStream;
private TarArchiveEntry currentEntry = null;
public TarArchiveReader( InputStream in ) throws IOException
{
this( in, true, false );
}
public TarArchiveReader( InputStream in, boolean isBuffered, boolean isCompressed ) throws IOException
{
InputStream stream = in;
if ( isBuffered ) {
stream = new BufferedInputStream( stream );
}
if ( isCompressed ) {
stream = new GZIPInputStream( stream );
}
this.tarInputStream = new TarArchiveInputStream( stream );
}
public boolean hasNextEntry() throws IOException
{
this.currentEntry = this.tarInputStream.getNextTarEntry();
if ( this.currentEntry != null ) {
return true;
} else {
return false;
}
}
public String getEntryName()
{
if ( this.currentEntry == null )
return null;
return this.currentEntry.getName();
}
public byte[] readCurrentEntry() throws IOException
{
ByteArrayOutputStream output = new ByteArrayOutputStream();
byte[] rawData = new byte[ 1024 ];
int count = 0;
while ( ( count = this.tarInputStream.read( rawData ) ) != -1 ) {
output.write( rawData, 0, count );
}
return output.toByteArray();
}
@Override
public void close() throws IOException
{
tarInputStream.close();
}
}
public static class TarArchiveWriter implements AutoCloseable
{
private final TarArchiveOutputStream tarOutputStream;
public TarArchiveWriter( OutputStream out ) throws IOException
{
this( out, true, true );
}
public TarArchiveWriter( OutputStream out, boolean isBuffered, boolean isCompressed ) throws IOException
{
OutputStream stream = out;
if ( isBuffered ) {
stream = new BufferedOutputStream( stream );
}
if ( isCompressed ) {
stream = new GZIPOutputStream( stream );
}
this.tarOutputStream = new TarArchiveOutputStream( stream );
}
public void writeFile( String filename, String data ) throws IOException
{
if ( data == null )
return;
putFile( filename, data.getBytes( StandardCharsets.UTF_8 ) );
}
public void writeFile( String filename, byte[] data ) throws IOException
{
if ( data == null )
return;
putFile( filename, data );
}
private void putFile( String filename, byte[] data ) throws IOException
{
if ( data == null )
return;
TarArchiveEntry entry = new TarArchiveEntry( filename );
entry.setSize( data.length );
entry.setModTime( System.currentTimeMillis() );
entry.setMode( 0644 );
tarOutputStream.putArchiveEntry( entry );
tarOutputStream.write( data );
tarOutputStream.closeArchiveEntry();
}
@Override
public void close() throws IOException
{
tarOutputStream.close();
}
}
}
|