Создание ZIP-файла с Android - PullRequest
2 голосов
/ 10 февраля 2012

Как я могу создать ZIP-файл из XML-файла?

Я хочу сделать резервную копию всех моих входящих сообщений в формате XML, сжать XML-файл и сохранить его на SD-карте .

Ответы [ 5 ]

4 голосов
/ 11 февраля 2012

Следующий код решил мою проблему.

public class makeZip {
    static final int BUFFER = 2048;

    ZipOutputStream out;
    byte data[];

    public makeZip(String name) {
        FileOutputStream dest=null;
        try {
            dest = new FileOutputStream(name);
        } 
        catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        out = new ZipOutputStream(new BufferedOutputStream(dest));
        data = new byte[BUFFER];
    }

    public void addZipFile (String name) {
        Log.v("addFile", "Adding: ");
        FileInputStream fi=null;
        try {
            fi = new FileInputStream(name);
            Log.v("addFile", "Adding: ");
        }
        catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            Log.v("atch", "Adding: ");
        }
        BufferedInputStream origin = new BufferedInputStream(fi, BUFFER);
        ZipEntry entry = new ZipEntry(name);
        try {
            out.putNextEntry(entry);
            Log.v("put", "Adding: ");
        }
        catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        int count;
        try {
            while((count = origin.read(data, 0, BUFFER)) != -1) {
               out.write(data, 0, count);
               //Log.v("Write", "Adding: "+origin.read(data, 0, BUFFER));
            }
        }
        catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
             Log.v("catch", "Adding: ");
        }
        try {
            origin.close();
        }
        catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public void closeZip () {
        try {
            out.close();
        }
        catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
0 голосов
/ 09 мая 2014

Если у вас есть FOLDER в SDCard и вы хотите создать ее zip-архив, просто скопируйте и вставьте этот код в свой проект, и он даст вам zip-папку.Этот код создаст почтовый индекс папки, которая содержит только файлы, внутри которых не должно быть вложенной папки.Вы можете также изменить себя.

 String []s=new String[2]; //declare an array for storing the files i.e the path of your source files
  s[0]="/mnt/sdcard/Wallpaper/pic.jpg";    //Type the path of the files in here
  s[1]="/mnt/sdcard/Wallpaper/Final.pdf"; // path of the second file

  zip((s,"/mnt/sdcard/MyZipFolder.zip");    //call the zip function


 public void zip(String[] files, String zipFile) 
 { 
    private String[] _files= files;
    private String _zipFile= zipFile;  

try  { 
  BufferedInputStream origin = null; 
  FileOutputStream dest = new FileOutputStream(_zipFile); 

  ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(dest)); 

  byte data[] = new byte[BUFFER]; 

  for(int i=0; i < _files.length; i++) { 
      Log.d("add:",_files[i]);
    Log.v("Compress", "Adding: " + _files[i]); 
    FileInputStream fi = new FileInputStream(_files[i]); 
    origin = new BufferedInputStream(fi, BUFFER); 
    ZipEntry entry = new ZipEntry(_files[i].substring(_files[i].lastIndexOf("/") + 1)); 
    out.putNextEntry(entry); 
    int count; 
    while ((count = origin.read(data, 0, BUFFER)) != -1) { 
      out.write(data, 0, count); 
    } 
    origin.close(); 
  } 

  out.close(); 
} catch(Exception e) { 
  e.printStackTrace(); 
} 

}

Также добавьте разрешения в android-manifest.xml, используя этот код

  <uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
0 голосов
/ 10 февраля 2012

Android SDK имеет API gZip, с помощью которого вы можете читать / записывать сжатые данные.См. открытый класс GZIPOutputStream .

0 голосов
/ 10 февраля 2012

Используйте следующий код, но если вы хотите сохранить на SD-карту, выполните fileoutputstream, а не bytearrayoutputstream.

private String compressData(String uncompressedData) {
    String compressedData = null;
    try {
        if (uncompressedData.length() > 200) {
            // Perform Compression.
            byte[] originalBytes = uncompressedData.getBytes();

            Deflater deflater = new Deflater();
            deflater.setInput(originalBytes);
            deflater.finish();

            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            byte[] buf = new byte[8192];
            while (!deflater.finished()) {
                int byteCount = deflater.deflate(buf);
                baos.write(buf, 0, byteCount);
            }
            deflater.end();

            byte[] compressedBytes = baos.toByteArray();

            compressedData = new String(compressedBytes, 0, compressedBytes.length);
        }
    }
    catch (Exception e) {
        compressedData = null;
    }
    return compressedData;
}
0 голосов
/ 10 февраля 2012

Вы можете взглянуть на эти две ссылки:

ZipOutputStream http://developer.android.com/reference/java/util/zip/ZipOutputStream.html

Архивирование файлов http://www.jondev.net/articles/Zipping_Files_with_Android_%28Programmatically%29

Надеюсь, это поможет

...