Android将图像复制到zip

时间:2017-02-25 17:09:20

标签: java android

我在这里有一个代码,它在画廊中挑选图像并复制它挑选的图像并压缩它们。它在复制文件时运行顺畅。当我包含zip函数时,它会出现错误

Compress c = new Compress(path, targetPath+ picturename);.

以下是代码:

public class MainActivity extends AppCompatActivity {
  private static final int PICK_IMAGE_MULTIPLE = 100;
  public static String ExternalStorageDirectoryPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/";
  //Setting a directory that is already created on the Storage to copy the file to.
  public static String targetPath = ExternalStorageDirectoryPath + "BrokenDave" + File.separator;
  String picturename = getPicturename();

  String path;

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

  public void OnClickGallery(View v) {
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_PICK);
    intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
    startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_MULTIPLE);
  }

  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
      switch(requestCode){
        case PICK_IMAGE_MULTIPLE:
        if (data != null && data.getData() != null) {
          Uri uri = data.getData();
          path = getPath(uri);
          copyFileOrDirectory(path, targetPath + picturename);
          Compress c =new Compress(path, targetPath + picturename); //first parameter is d files second parameter is zip file name
          c.zip();    //call the zip function
          Toast.makeText(this, "File zipped" + path, Toast.LENGTH_SHORT).show();
          //get error on calling the zip function 
        } else {
          // Select Multiple
          ClipData clipdata = data.getClipData();
          if (clipdata != null) {
            for (int i = 0; i < clipdata.getItemCount(); i++) {
              ClipData.Item item = clipdata.getItemAt(i);
              Uri uri = item.getUri();
              //ito un path
              path = getPath(uri);
              //ito un pag copy
              copyFileOrDirectory(path, targetPath + picturename);
              Compress c =new Compress(path, targetPath + picturename);  
              c.zip();    //call the zip function
              Toast.makeText(this, "Files Deleted" + path, Toast.LENGTH_SHORT).show();
            }
          }
        }
        break;
      }
    }
  }
  public String getPath(Uri uri) {
    Cursor cursor = getContentResolver().query(uri, null, null, null, null);
    cursor.moveToFirst();
    String document_id = cursor.getString(0);
    document_id = document_id.substring(document_id.lastIndexOf(":") + 1);
    cursor.close();
    cursor = getContentResolver().query(
          android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
          null, MediaStore.Images.Media._ID + " = ? ", new String[]{document_id}, null);
    cursor.moveToFirst();
    String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
    cursor.close();
    return path;
  }
  public void copyFileOrDirectory(String srcDir, String dstDir) {
    try {
      File src = new File(srcDir);
      File dst = new File(dstDir, src.getName());
      if (src.isDirectory()) {
        String files[] = src.list();
        int filesLength = files.length;
        for (int i = 0; i < filesLength; i++) {
          String src1 = (new File(src, files[i]).getPath());
          String dst1 = dst.getPath();
          copyFileOrDirectory(src1, dst1);
        }
      } else {
        copyFile(src, dst);
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  public void copyFile(File sourceFile, File destFile) throws IOException {
    if (!destFile.getParentFile().exists())
      destFile.getParentFile().mkdirs();
    if (!destFile.exists()) {
      destFile.createNewFile();
    }
    InputStream in = new FileInputStream(sourceFile);
    OutputStream out = new FileOutputStream(destFile);
    // Transfer bytes from in to out
    byte[] buf = new byte[1024];
    int len;
    while ((len = in.read(buf)) > 0) {
      out.write(buf, 0, len);
    }
    in.close();
    out.close();
    if (destFile != null) {
      // pag delete ng file
      sourceFile.delete();
      Intent scanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
      scanIntent.setData(Uri.fromFile(sourceFile));
      sendBroadcast(scanIntent);
      sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
               Uri.parse("file://" + Environment.getExternalStorageDirectory())));
    }
  }
  private String getPicturename() {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmm");
    String timestamp = sdf.format(new Date());
    return "Img" + timestamp + ".jpg";
  }
}

这是compress.java

public class Compress {
  private static final int BUFFER = 2048;
  public static String ExternalStorageDirectoryPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/";
  //Setting a directory that is already created on the Storage to copy the file to.
  public static String targetPath = ExternalStorageDirectoryPath + "BrokenDave" + File.separator;

  private String[] _files;
  // private String targetPath; 
  public Compress(String[] files, String targetPath) {
    _files = files;
  }
  public void zip() {
    try  {
      BufferedInputStream origin = null;
      FileOutputStream dest = new FileOutputStream(targetPath);
      ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(dest));
      byte data[] = new byte[BUFFER];
      for(int i=0; i < _files.length; 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();
    }
  }
}

0 个答案:

没有答案