2013-12-25 2 views
0

Я разрабатываю приложение для Android. Он создает основную папку и дочерние папки/файлы для хранения некоторых данных. Мне нужно перенести эту основную папку, а потом - на компьютер. Но я не хочу просто копировать эти папки. Я хочу создать файл (с уникальным расширением), который хранит все эти папки/файлы. И я должен иметь возможность воссоздать эти папки из компьютерной программы, которую я буду развивать.Можно ли конвертировать папку в файл

Файлы в основном текстовые файлы. Я могу их прочитать, а затем записать в другой файл. Но занимает ли это слишком много времени, сравнивая только с копией/вставкой?

+3

Похоже, вы пытаетесь заново изобрести почтовый индекс или такие вещи или такие вещи ... – Mat

+2

ZIP без сжатия. – Geros

+0

Да что-то вроде этого на самом деле :) Но мне не нужно сжимать файлы. Мне просто нужно преобразовать их в один файл. – MilesDyson

ответ

1

Существует рабочий класс утилиты сжатия, который я нашел. но это зависит от вас, чтобы использовать его, конвертировать его, как один файл взять его с собой, куда бы вы ни пошли. добавьте этот код как отдельный класс. используйте его для печати и распаковки.

Пожалуйста, обратите внимание. это задача сжатия, так что вам нужно много сока!

import java.io.BufferedOutputStream; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.util.Enumeration; 
import java.util.zip.ZipEntry; 
import java.util.zip.ZipFile; 
import java.util.zip.ZipOutputStream; 

public class ZipUtility { 

    public static final void zipDirectory(File directory, File zip) throws IOException { 
     ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zip)); 
     zip(directory, directory, zos); 
     zos.close(); 
    } 

    private static final void zip(File directory, File base, 
    ZipOutputStream zos) throws IOException { 
     File[] files = directory.listFiles(); 
     byte[] buffer = new byte[8192]; 
     int read = 0; 
     for (int i = 0, n = files.length; i < n; i++) { 
      if (files[i].isDirectory()) { 
      zip(files[i], base, zos); 
      } else { 
      FileInputStream in = new FileInputStream(files[i]); 
      ZipEntry entry = new ZipEntry(files[i].getPath().substring(
      base.getPath().length() + 1)); 
      zos.putNextEntry(entry); 
      while (-1 != (read = in.read(buffer))) { 
       zos.write(buffer, 0, read); 
      } 
      in.close(); 
     } 
     } 
    } 

    public static final void unzip(File zip, File extractTo) throws IOException { 
     ZipFile archive = new ZipFile(zip); 
     Enumeration e = archive.entries(); 
     while (e.hasMoreElements()) { 

     ZipEntry entry = (ZipEntry) e.nextElement(); 
     File file = new File(extractTo, entry.getName()); 

     if (entry.isDirectory() && !file.exists()) { 
      file.mkdirs(); 
     } else { 
      if (!file.getParentFile().exists()) { 
       file.getParentFile().mkdirs(); 
      } 

      InputStream in = archive.getInputStream(entry); 
      BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file)); 

      byte[] buffer = new byte[8192]; 
      int read; 

      while (-1 != (read = in.read(buffer))) { 
       out.write(buffer, 0, read); 
      } 

      in.close(); 
      out.close(); 
     } 
     } 
    } 
} 
Смежные вопросы