我的应用程序的当前体系结构不允许我在服务器端存储文件并创建指向该存储文件的链接.那么有没有其他选项(或代码片段)直接流ZipFile并将其存储在客户端?
编辑:我想我的问题被误解了.我收到压缩文件的答案并将其存储在客户端.我已经实现了这一点.以下是示例用例的主要关注点:
场景:用户有大约5000条记录(每条大约1 MB),用户希望下载以ZIP格式压缩的每5000条记录的子记录(CSV格式).所有CSV文件都是即时生成的.
方法:由于ZIP文件的大小可以达到5 GB,因此我采用直接将文件内容流式传输到客户端创建的ZIP文件的方法.我已经使用了PipeInputStream和PipeOutputStream.
结果:由于我是vaadin的新手,我在上述方法中没有成功,因此寻找支持将ZIP文件(无论大小可能是直接)流式传输到客户端的任何建议/代码片段.
我想我现在很清楚.
我正在编写一个Android应用程序,我需要从几个文件夹中读取几个文件并将它们添加到几个zip存档中.我需要限制档案的最大大小,比方说16mb.因此,在运行时,如果文件的大小超过16 MB,则将文件添加到存档时创建具有相同大小限制的另一个存档,依此类推.我正在使用以下包装类:
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ChunkedZippedOutputStream {
private ZipOutputStream zipOutputStream;
private String path;
private String name;
private long currentSize;
private int currentChunkIndex;
private final long MAX_FILE_SIZE = 16 * 1000 * 1024; // 16mb limit
private final String PART_POSTFIX = ".part";
private final String FILE_EXTENSION = ".zip";
public ChunkedZippedOutputStream(String path, String name) throws FileNotFoundException {
this.path = path;
this.name = name;
constructNewStream();
}
public void addEntry(ZipEntry entry) throws IOException …
Run Code Online (Sandbox Code Playgroud) 我需要在 java 中编写一个算法(对于一个 android 应用程序)来读取一个包含更多文件夹的文件夹,每个文件夹都包含图像和音频文件,所以结构是这样的: mainDir/categorySubfolder/myFile1.jpg
我的问题是我需要将存档的大小限制为 16mb,并在运行时根据需要创建尽可能多的存档以包含我的主mainDir
文件夹中的所有文件。
我从网上尝试了几个例子,我阅读了 java 文档,但我无法理解并按照我需要的方式将它们组合在一起。以前有人做过这个,或者有链接或例子吗?
我用递归方法解决了文件的读取问题,但我无法编写 zip 创建的逻辑。
我愿意接受建议或更好的工作示例。