Package SevenZip

Source Code of SevenZip.ArchiveExtractCallback$RAOutputStream

package SevenZip;

import SevenZip.Archive.IArchiveExtractCallback;
import SevenZip.Archive.IInArchive;
import SevenZip.Archive.SevenZipEntry;

import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.io.RandomAccessFile;

public class ArchiveExtractCallback implements IArchiveExtractCallback // , ICryptoGetTextPassword,
{
   
    protected IInArchive archiveHandler;    // IInArchive
    protected String filePath;           // name inside arcvhive
    protected String diskFilePath;       // full path to file on disk
   
    public long NumErrors;
    public boolean PasswordIsDefined;
    protected String Password;
    protected boolean extractMode;
   
    protected boolean isDirectory;
    protected final File exractPath;
   
    public ArchiveExtractCallback(File extractPath) {
      this.PasswordIsDefined = false;
      this.exractPath = extractPath;
    }
   
    public ArchiveExtractCallback() {
      this(null);
    }
   
    public void Init(IInArchive archiveHandler) {
        this.NumErrors = 0;
        this.archiveHandler = archiveHandler;
    }
   
    public void SetTotal(long size) {  }
    public void SetCompleted(long completeValue) {  }
   
    public void PrepareOperation(int askExtractMode) {
        this.extractMode = (askExtractMode == IInArchive.NExtract_NAskMode_kExtract);
        switch (askExtractMode) {
            case IInArchive.NExtract_NAskMode_kExtract:
                System.out.print("Extracting  ");
                break;
            case IInArchive.NExtract_NAskMode_kTest:
              System.out.print("Testing     ");
                break;
            case IInArchive.NExtract_NAskMode_kSkip:
              System.out.print("Skipping    ");
                break;
        };
        System.out.print(this.filePath);
    }
   
    public void SetOperationResult(int operationResult) throws IOException {
        if (operationResult != IInArchive.NExtract_NOperationResult_kOK) {
            this.NumErrors++;
            System.out.print("     ");
            switch(operationResult) {
                case IInArchive.NExtract_NOperationResult_kUnSupportedMethod:
                    throw new IOException("Unsupported Method");
                case IInArchive.NExtract_NOperationResult_kCRCError:
                  throw new IOException("CRC Failed");
                case IInArchive.NExtract_NOperationResult_kDataError:
                  throw new IOException("Data Error");
                default:
                  // throw new IOException("Unknown Error");
            }
        }
        System.out.println();
    }
   
    public OutputStream GetStream(int index, int askExtractMode) throws IOException {
        RAOutputStream r = null;
        SevenZipEntry item = this.archiveHandler.getEntry(index);
        this.filePath = item.getName();
       
        File file;
        if (this.exractPath == null) {
          file = new File(this.filePath);
        } else {
          file = new File(this.exractPath, this.filePath);
        }
        this.diskFilePath = file.getAbsolutePath();
       
        if (askExtractMode == IInArchive.NExtract_NAskMode_kExtract) {
            if (this.isDirectory = item.isDirectory()) {
              if (!file.isDirectory() && !file.mkdirs())
                throw new IOException("failed to make directories: " + file);
                return null;
            }
           
            File dirs = file.getParentFile();
            if (dirs != null && !dirs.isDirectory() && !dirs.mkdirs()) {
              throw new IOException("failed to make directories: " + dirs);
            }
           
            long pos = item.getPosition();
            if (pos == -1) {
                file.delete();
            }
           
            RandomAccessFile outStr = new RandomAccessFile(file, "rw");
           
            if (pos != -1)
                outStr.seek(pos);
            
            r = new RAOutputStream(outStr);
        }
       
        // other case : skip ...
        return r;
    }
   
    private class RAOutputStream extends OutputStream {
        RandomAccessFile file;
       
        public RAOutputStream(RandomAccessFile f) {
            this.file = f;
        }
       
        public void close() throws IOException {
            this.file.close();
            this.file = null;
        }
        /*
        public void flush() throws IOException {
            file.flush();
        }
         */
        public void write(byte[] b) throws IOException {
            this.file.write(b);
        }
       
        public void write(byte[] b, int off, int len) throws IOException {
            this.file.write(b,off,len);
        }
       
        public void write(int b) throws IOException {
            this.file.write(b);
        }
    }
}
TOP

Related Classes of SevenZip.ArchiveExtractCallback$RAOutputStream

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.