如何在android中压缩文件

如何在android中压缩文件,android,Android,我有一个按程序压缩文本文件的要求 我已经在文件目录(context.getFilesDirectory()), 我想要压缩文本文件并将压缩后的文件添加到Intent对象 请给我一段代码,告诉我如何在android中压缩文件 如果您在SD卡中有一个文件夹,并且您想创建它的zip,那么只需将此代码复制并粘贴到您的项目中,它就会为您提供一个zip文件夹。这段代码将创建一个文件夹的zip文件,其中只包含任何嵌套文件夹都不应该在里面的文件。您可以为自己进一步修改 String []s=new Strin

我有一个按程序压缩文本文件的要求

我已经在文件
目录(context.getFilesDirectory())

我想要压缩文本文件并将压缩后的文件添加到Intent对象


请给我一段代码,告诉我如何在android中压缩文件

如果您在SD卡中有一个文件夹,并且您想创建它的zip,那么只需将此代码复制并粘贴到您的项目中,它就会为您提供一个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(); 
} 
String[]s=新字符串[2]//声明用于存储文件的数组,即源文件的路径
s[0]=“/mnt/sdcard/Wallpaper/pic.jpg”//在此处键入文件的路径
s[1]=“/mnt/sdcard/Wallpaper/Final.pdf”;//第二个文件的路径
zip((s,“/mnt/sdcard/MyZipFolder.zip”);//调用zip函数
公共void zip(字符串[]文件,字符串zipFile)
{ 
私有字符串[]_files=文件;
私有字符串_zipFile=zipFile;
试试{
BufferedInputStream原点=null;
FileOutputStream dest=新的FileOutputStream(_zipFile);
ZipOutputStream out=新的zipoutpstream(新的缓冲输出流(dest));
字节数据[]=新字节[缓冲区];
对于(int i=0;i<_files.length;i++){
Log.d(“添加:”,_文件[i]);
Log.v(“压缩”,“添加:”+_文件[i]);
FileInputStream fi=新的FileInputStream(_files[i]);
原点=新的BufferedInputStream(fi,缓冲区);
ZipEntry entry=newzipentry(_文件[i]。子字符串(_文件[i]。lastIndexOf(“/”+1));
外出、外出(进入);
整数计数;
而((count=origin.read(数据,0,缓冲区))!=-1{
输出。写入(数据,0,计数);
} 
origin.close();
} 
out.close();
}捕获(例外e){
e、 printStackTrace();
} 
}

还可以使用以下代码在android-manifest.xml中添加权限


如果你想用密码压缩文件,你可以看一看,你需要将以下几行添加到你的build.gradle中:

dependencies {
compile 'com.github.ghost1372:Mzip-Android:0.4.0'
}
以下是压缩文件的代码:

Zip:

ZipArchive zipArchive = new ZipArchive();
zipArchive.zip(targetPath,destinationPath,password);

//此库已失效,因为它在github上不再可用

这是压缩文件的工作代码。您必须将要压缩的所有文件路径添加到arrayList中,并将其作为参数与所需zipfile的字符串名称一起发送到下面的函数

 public String zipper(ArrayList<String> allFiles, String zipFileName) throws IOException
    {
        timeStampOfZipFile =new SimpleDateFormat("HH:mm:ss").format(Calendar.getInstance().getTime());
        App.mediaStorageDir.mkdirs();
        zippath = App.mediaStorageDir.getAbsolutePath() + "/" + zipFileName+ timeStampOfZipFile +  ".zip";
        try
        {
            if (new File(zippath).exists())
            {
                new File(zippath).delete();
            }
            //new File(zipFileName).delete(); // Delete if exists
            ZipFile zipFile = new ZipFile(zippath);
            ZipParameters zipParameters = new ZipParameters();
            zipParameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
            zipParameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
            zipParameters.setPassword("Reset");

            if (allFiles.size() > 0)
            {
                for (String fileName : allFiles)
                {
                    File file = new File(fileName);
                    zipFile.addFile(file, zipParameters);
                }
            }


        }
        catch (ZipException e)
        {
            e.printStackTrace();
        }
        return zippath;
    }
创建将保存zip文件的目录。函数的结果返回zip文件路径,该路径可用于附加到多部分实体以将其发送到服务器(如果需要)

需要API>=marshmellow的运行时权限

  <!-- == External Storage == -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>


您有一个语法错误,两个关键字“private”的用法无效,缓冲区是未定义的。@RenniePet但为什么它和我一起运行,huhCan你能告诉我缓冲区变量的理想值是什么吗?@14bce109是的,它的大小是,put BUFFER=1024它会工作的,如果不能,我会把我收进收件箱,我会帮你的,但别忘了检查文件路径a目录这段代码没有使用
java.util.zip.ZipFile
只能读取ZIP文件的。已改用。
public static final File mediaStorageDir = new File(Environment.getExternalStorageDirectory(),
            "yourAppFoler");
  <!-- == External Storage == -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>