【问题标题】:How to send a zip file in Android without saving it first?如何在不先保存的情况下在 Android 中发送 zip 文件?
【发布时间】:2020-03-22 22:04:52
【问题描述】:

我有这个代码可以压缩成 zip 格式的一些文件:

 public int zip(List<String> _files, String zipFileName) {
        try {
            BufferedInputStream origin = null;
            FileOutputStream dest = new FileOutputStream(zipFileName);
            ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(
                    dest));
            byte data[] = new byte[BUFFER];

            for (int i = 0; i < _files.size(); i++) {
                Log.v("Compress", "Adding: " + _files.get(i));
                FileInputStream fi = new FileInputStream(_files.get(i));
                origin = new BufferedInputStream(fi, BUFFER);

                ZipEntry entry = new ZipEntry(_files.get(i).substring(_files.get(i).lastIndexOf(File.separator) + 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();
        }
        return 1;
    }

我想获取 ZipOutPutStream 并通过 Intent 或其他方式发送它,而不是像这样保存:

while ((count = origin.read(data, 0, BUFFER)) != -1) {
                    out.write(data, 0, count);
                }

有办法吗?目前我只能使用其保存的名称作为字符串发送 zip。

【问题讨论】:

    标签: android zipfile


    【解决方案1】:

    没有办法。 Intent 被限制为 2 MB,因此它只能容纳一个非常小的 zip 文件。接收者并不期待原始数据。您也不能发送对象(如 ZipOutputStream),因为 Intents 仅发送其附加内容的序列化版本,因为接收者可能不在同一个进程中。

    【讨论】:

    • 诀窍是您需要在接收者完成后将其删除。因此,可能值得将其写入缓存文件并让 Android 为您执行此操作,或者在将来的某个时间执行此操作。
    • 嗯...我并没有考虑将它写入缓存中。我该怎么做?
    • 对于 zip 文件名,使其相对于缓存目录 getCacheDir()。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    • 1970-01-01
    相关资源
    最近更新 更多