如何在android中压缩文件夹并通过电子邮件发送

砖匠

每个人:我正在尝试在 Android 开发中通过电子邮件发送一个文件夹(这个文件夹中有很多文件)。

首先,我尝试使用点击事件和意图事件直接发送整个文件夹。

我的第一次尝试代码显示以下内容:

我的第一部分代码是 onclicklistener 事件:

listView.setOnMenuItemClickListener(new SwipeMenuListView.OnMenuItemClickListener() {
                @Override
                public boolean onMenuItemClick(int position, SwipeMenu menu,int index) {

                    switch (index) {
                        case 0:
                            sendEmail(list.get(position).getName());
                            break;

                        case 1:
                            list.remove(position);
                            adapter.notifyDataSetChanged();

                    }

                    return false;
                }
            });

我发送电子邮件的第二个代码如下:

    public void sendEmail(String data_path){
        Intent email = new Intent(Intent.ACTION_SEND);
        File file_location = new File(SDCard, data_path);
        email.setType("vnd.android.cursor.dir/email");
        email.putExtra(Intent.EXTRA_EMAIL, new String[]{"[email protected]"});  //set up email
        email.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file_location));   //add attachment
        email.putExtra(Intent.EXTRA_SUBJECT, "Subject");
        startActivity(Intent.createChooser(email, "pick an Email provider"));

}

当我运行此代码时,可以正常跳转到电子邮件发件人,但没有任何文件夹工具,电子邮件工具为空。

我想知道是否无法通过电子邮件直接发送文件夹。

现在我正在尝试另一种方法来解决这个问题:我打算先压缩文件夹(.zip),然后只需单击一下事件即可将 zip 文件发送到电子邮件,但我找不到任何显示如何压缩文件夹的解决方案和只需单击一次即可发送 zip 文件,我的意思是我想要一个解决方案:

  1. 点击需要发送的文件(点击事件已完成)
  2. 触发点击事件后,应用程序会将点击的文件压缩为 zip 文件。
  3. zip 文件将自动添加为等待发送的邮件工具

我在那里被困了很多天,仍然没有找到任何答案,我也在 StackOverflow 上搜索,但大多数问题是关于如何压缩文件或通过电子邮件发送文件。我正在寻找一种方法来压缩文件夹并通过单击事件发送 zip 文件。

如果您有任何想法,我将不胜感激!

加斯顿·赛伦

这是将文件夹转换为 zip 的解决方法。

首先,授予权限:

<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

然后使用它来转换您的文件夹:

/*
 * 
 * Zips a file at a location and places the resulting zip file at the toLocation
 * Example: zipFileAtPath("downloads/myfolder", "downloads/myFolder.zip");
 */

public boolean zipFileAtPath(String sourcePath, String toLocation) {
    final int BUFFER = 2048;

    File sourceFile = new File(sourcePath);
    try {
        BufferedInputStream origin = null;
        FileOutputStream dest = new FileOutputStream(toLocation);
        ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(
                dest));
        if (sourceFile.isDirectory()) {
            zipSubFolder(out, sourceFile, sourceFile.getParent().length());
        } else {
            byte data[] = new byte[BUFFER];
            FileInputStream fi = new FileInputStream(sourcePath);
            origin = new BufferedInputStream(fi, BUFFER);
            ZipEntry entry = new ZipEntry(getLastPathComponent(sourcePath));
            out.putNextEntry(entry);
            int count;
            while ((count = origin.read(data, 0, BUFFER)) != -1) {
                out.write(data, 0, count);
            }
        }
        out.close();
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }

这是另一个例子:

private static void zipFolder(String inputFolderPath, String outZipPath) {
    try {
        FileOutputStream fos = new FileOutputStream(outZipPath);
        ZipOutputStream zos = new ZipOutputStream(fos);
        File srcFile = new File(inputFolderPath);
        File[] files = srcFile.listFiles();
        Log.d("", "Zip directory: " + srcFile.getName());
        for (int i = 0; i < files.length; i++) {
            Log.d("", "Adding file: " + files[i].getName());
            byte[] buffer = new byte[1024];
            FileInputStream fis = new FileInputStream(files[i]);
            zos.putNextEntry(new ZipEntry(files[i].getName()));
            int length;
            while ((length = fis.read(buffer)) > 0) {
                zos.write(buffer, 0, length);
            }
            zos.closeEntry();
            fis.close();
        }
        zos.close();
    } catch (IOException ioe) {
        Log.e("", ioe.getMessage());
    }
}

您也可以使用此库来压缩文件夹或文件。

将 .jar 导入您的项目,然后您可以执行此操作来转换您需要的内容:

try {
    File input = new File("path/to/your/input/fileOrFolder");
    String destinationPath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "zippedItem.zip";
    ZipParameters parameters = new ZipParameters();
    parameters.setCompressionMethod(Zip4jConstants.COMP_STORE);
    parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
    File output = new File(destinationPath);
    ZipFile zipFile = new ZipFile(output);
    // .addFolder or .addFile depending on your input
    if (sourceFile.isDirectory())
        zipFile.addFolder(input, parameters);
    else
        zipFile.addFile(input, parameters);
    // Your input file/directory has been zipped at this point and you
    // can access it as a normal file using the following line of code
    File zippedFile = zipFile.getFile();
} catch (ZipException e) {
    Log.e(TAG, Log.getStackTraceString(e));
}

这应该可以解决问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通过AppleScript通过电子邮件发送文件夹的内容

来自分类Dev

使用vbscript通过电子邮件发送文件夹/文件

来自分类Dev

如何在Android KitKat上创建.txt文件并通过电子邮件发送

来自分类Dev

如何在通过电子邮件表格发送的电子邮件中创建响应链接?

来自分类Dev

如何让 Outlook 定期检查文件夹中的文件,然后通过电子邮件将它们发送出去?

来自分类Dev

Java中已经存在电子邮件时,如何在INBOX文件夹的复制操作中跳过电子邮件?

来自分类Dev

如何通过电子邮件发送Excel文件?

来自分类Dev

VBScript检查文件夹中的文件并通过电子邮件发送文件名,该文件名在1小时内未更新

来自分类Dev

如何在Django Rest Framework中通过电子邮件发送动态数据

来自分类Dev

如何在Outlook 2013中(通过Exchange服务器)重命名电子邮件帐户的默认“已发送”文件夹标签?

来自分类Dev

如何阻止通过MailApp.sendEmail发送的电子邮件进入Outlook中的垃圾文件夹?

来自分类Dev

在已发送文件夹中创建电子邮件

来自分类Dev

是否可以通过电子邮件规则将收到的电子邮件从收件箱移到文件夹中

来自分类Dev

将文件保存在本地,以便通过电子邮件发送或在Android文件管理器中查看

来自分类Dev

PHP通过电子邮件发送JSON文件

来自分类Dev

无法通过电子邮件发送文件

来自分类Dev

codeigniter 多个文件归档通过电子邮件发送

来自分类Dev

如何复制已发送文件夹中的电子邮件?

来自分类Dev

如何删除不在重要文件夹或已发送文件夹中的所有电子邮件?

来自分类Dev

如何通过Codename One通过电子邮件发送.csv文件?

来自分类Dev

通过电子邮件发送表格android

来自分类Dev

如何通过电子邮件发送保存的 CSV 文件或在 Android 中使用 Google Drive 上传?

来自分类Dev

使用Google表格将压缩的Zip文件夹发送到电子邮件

来自分类Dev

使用Google表格将压缩的Zip文件夹发送到电子邮件

来自分类Dev

如何在 CodeIgniter 中使用自己的电子邮件库通过电子邮件库发送附件

来自分类Dev

通过电子邮件发送多个文件,并在电子邮件中添加正文消息(Unix Korn Shell)

来自分类Dev

如何通过电子邮件发送python代码输出?

来自分类Dev

如何通过电子邮件发送$ _SESSION变量

来自分类Dev

如何使用MFMailComposeViewContoller通过电子邮件发送pdf?

Related 相关文章

  1. 1

    通过AppleScript通过电子邮件发送文件夹的内容

  2. 2

    使用vbscript通过电子邮件发送文件夹/文件

  3. 3

    如何在Android KitKat上创建.txt文件并通过电子邮件发送

  4. 4

    如何在通过电子邮件表格发送的电子邮件中创建响应链接?

  5. 5

    如何让 Outlook 定期检查文件夹中的文件,然后通过电子邮件将它们发送出去?

  6. 6

    Java中已经存在电子邮件时,如何在INBOX文件夹的复制操作中跳过电子邮件?

  7. 7

    如何通过电子邮件发送Excel文件?

  8. 8

    VBScript检查文件夹中的文件并通过电子邮件发送文件名,该文件名在1小时内未更新

  9. 9

    如何在Django Rest Framework中通过电子邮件发送动态数据

  10. 10

    如何在Outlook 2013中(通过Exchange服务器)重命名电子邮件帐户的默认“已发送”文件夹标签?

  11. 11

    如何阻止通过MailApp.sendEmail发送的电子邮件进入Outlook中的垃圾文件夹?

  12. 12

    在已发送文件夹中创建电子邮件

  13. 13

    是否可以通过电子邮件规则将收到的电子邮件从收件箱移到文件夹中

  14. 14

    将文件保存在本地,以便通过电子邮件发送或在Android文件管理器中查看

  15. 15

    PHP通过电子邮件发送JSON文件

  16. 16

    无法通过电子邮件发送文件

  17. 17

    codeigniter 多个文件归档通过电子邮件发送

  18. 18

    如何复制已发送文件夹中的电子邮件?

  19. 19

    如何删除不在重要文件夹或已发送文件夹中的所有电子邮件?

  20. 20

    如何通过Codename One通过电子邮件发送.csv文件?

  21. 21

    通过电子邮件发送表格android

  22. 22

    如何通过电子邮件发送保存的 CSV 文件或在 Android 中使用 Google Drive 上传?

  23. 23

    使用Google表格将压缩的Zip文件夹发送到电子邮件

  24. 24

    使用Google表格将压缩的Zip文件夹发送到电子邮件

  25. 25

    如何在 CodeIgniter 中使用自己的电子邮件库通过电子邮件库发送附件

  26. 26

    通过电子邮件发送多个文件,并在电子邮件中添加正文消息(Unix Korn Shell)

  27. 27

    如何通过电子邮件发送python代码输出?

  28. 28

    如何通过电子邮件发送$ _SESSION变量

  29. 29

    如何使用MFMailComposeViewContoller通过电子邮件发送pdf?

热门标签

归档