解压缩/ data / data /文件夹中的文件 - Android Java编程

时间:2016-03-25 13:35:32

标签: java android file compression

如何以编程方式将备份数据直接从SD卡解压缩到/data/data/com.appname文件夹中?

我可以使用ES文件资源管理器直接解压缩/data/data/com.appname文件夹中的文件夹,但我需要通过我正在开发的应用程序自动执行此操作。

我尝试过以下代码,不幸的是我只能解压缩到我的应用的SD卡和数据文件夹。 我猜这是由于某种形式的app /文件夹安全性?

MainActivity.java

package fb.ziptester;

import android.provider.Settings;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

public void buttonOnClick(View v) {
    TextView zipSource = (TextView)findViewById(R.id.zip_source);
    TextView zipDest   = (TextView)findViewById(R.id.zip_dest);

    String sZipSource = "/storage/sdcard1/ACC/BU.zip";
    String sZipDest =   "/data/data/com.appname/";

    zipSource.setText(sZipSource);
    zipDest.setText(sZipDest);

    UnzipUtility zipUtil = new UnzipUtility();

    try {
        zipUtil.unzip(sZipSource, sZipDest);
    } catch(Exception ex) {
      //TODO
    }
  }
}  




package fb.ziptester;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

UnzipUtility.java

public class UnzipUtility {
/**
 * Size of the buffer to read/write data
 */
private static final int BUFFER_SIZE = 4096;
/**
 * Extracts a zip file specified by the zipFilePath to a directory specified by
 * destDirectory (will be created if does not exists)
 * @param zipFilePath
 * @param destDirectory
 * @throws IOException
 */
public void unzip(String zipFilePath, String destDirectory) throws IOException {
    File destDir = new File(destDirectory);
    if (!destDir.exists()) {
        destDir.mkdir();
    }
    ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipFilePath));
    ZipEntry entry = zipIn.getNextEntry();
    // iterates over entries in the zip file
    while (entry != null) {
        String filePath = destDirectory + File.separator + entry.getName();
        if (!entry.isDirectory()) {
            // if the entry is a file, extracts it
            extractFile(zipIn, filePath);
        } else {
            // if the entry is a directory, make the directory
            File dir = new File(filePath);
            dir.mkdir();
        }
        zipIn.closeEntry();
        entry = zipIn.getNextEntry();
    }
    zipIn.close();
}
/**
 * Extracts a zip entry (file entry)
 * @param zipIn
 * @param filePath
 * @throws IOException
 */
private void extractFile(ZipInputStream zipIn, String filePath) throws IOException {
    BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath));
    byte[] bytesIn = new byte[BUFFER_SIZE];
    int read = 0;
    while ((read = zipIn.read(bytesIn)) != -1) {
        bos.write(bytesIn, 0, read);
    }
    bos.close();
 }
}

非常感谢任何帮助。

谢谢。

0 个答案:

没有答案